Đây là một quá trình gồm hai bước và kết quả là Máy tính Trường không phù hợp với nó. Nó là tốt hơn để chạy này trong một kịch bản độc lập. Tuy nhiên, nó có thể được thực hiện trong máy tính trường, miễn là bạn sử dụng một mẹo. Bạn cần phải sử dụng một con trỏ để tải tất cả các giá trị vào một từ điển toàn cầu từ một danh sách được sắp xếp, nhưng chỉ trong quá trình tính toán của bản ghi đầu tiên. Đối với tất cả các bản ghi khác, bạn phải bỏ qua việc tạo từ điển để tránh liên tục đọc lại toàn bộ bảng cho mỗi hàng.
Ba giá trị trường phải được đặt trong một tuple để hoạt động như một khóa sẽ sắp xếp đúng. Tôi sẽ giả sử tất cả các giá trị kết hợp 3 trường là duy nhất trong bảng SamplePoint, nhưng tôi đã thêm ObjectID để đảm bảo nó là duy nhất. Bạn phải cung cấp đường dẫn và tên shapefile trong dòng 8 (hoặc tôi có thể sử dụng kỹ thuật mà FelixIP sử dụng khi sử dụng lớp đầu tiên trong bản đồ hiện tại). Nếu bạn muốn sử dụng các trường khác nhau cho một khóa, bạn phải thay đổi danh sách trường trong dòng 10 và khớp chúng với các trường đầu vào ở dòng 3 và dòng 15.
#Pre-logic Script Code:
relateDict = {}
def autoIncrement(myYear, myMonth, myDay, OID):
global relateDict
# only populate the dictionary if it has no keys
if len(relateDict) == 0:
# Provide the path to the relate feature class/table
relateFC = r"C:\Users\OWNER\Documents\ArcGIS\SamplePoints.shp"
# create a field list with the relate fields in sort order
relateFieldsList = ["Year", "Month", "Day", "OID@"]
# process a da search cursor to transfer the data to the dictionary
relateList = sorted([(r[0:]) for r in arcpy.da.SearchCursor(relateFC, relateFieldsList)])
for relateSort in range(0, len(relateList)):
relateDict[relateList[relateSort]] = relateSort + 1
return relateDict[(myYear,myMonth,myDay,OID)]
#Expression:
autoIncrement(!Year!, !Month!, !Day!, !OBJECTID!)
Tôi cũng không khuyến nghị sử dụng tên trường của Năm, Tháng và Ngày, vì những tên này chỉ hoạt động trong shapefile và không được phép trong cơ sở dữ liệu địa lý. Cơ sở dữ liệu địa lý sẽ thay đổi tên thành Năm_1, Tháng_1, Ngày_1 nếu bạn cố thêm chúng vào danh sách trường trong các thuộc tính của bảng.
Nếu mục đích của bảng này là liên kết nó với một lớp bảng / tính năng khác trên khóa đa trường, hãy xem xét sử dụng công cụ tôi đã tạo trong Blog của mình có tên Khóa nhiều trường với Công cụ khóa trường đơn - Liên kết hai lớp dựa trên nhiều lớp Cánh đồng