2013-03-26 40 views
6

Làm thế nào nó có thể được xác định trong một plug-in đồng bộ mà các trường đã thay đổi?
Plugin được đăng ký khi cập nhật.
Cái gì đó như một isDirty() trong JavaScript:Plugin cập nhật CRM 2011: Trường nào đã thay đổi?

// TODO: Implement your custom Plug-in business logic. 
IOrganizationService service = localContext.OrganizationService; 
Entity account = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; 
if (account.GetAttributeValue<String>("address1_latitude").isDirty()) 
{ 
    service.Create(new Lead { FirstName = "LOCATION CHANGED" }); // this is a stub 
} 

Trả lời

13

Các thuộc tính mà thực sự hiện diện trong Target là những người đã thay đổi. Các thuộc tính không thay đổi không xuất hiện ở đó.

+0

Các thuộc tính không thay đổi được truy cập như thế nào? – Bvrce

+8

Sử dụng trước hoặc sau hình ảnh (http://msdn.microsoft.com/en-us/library/gg309673.aspx#bkmk_preandpost) –

+0

Tôi sẽ sử dụng IOrganization.Retrieve vì Id có sẵn, nhưng cách nhìn hiệu quả hơn. – Bvrce

11

Tôi sẽ mở rộng câu trả lời của GCATNM một chút. Target chứa tất cả các giá trị sẽ được cập nhật, không nhất thiết phải tất cả các giá trị đã thay đổi. Trừ khi bạn thực hiện một số javascript cực kỳ "hacky" trên biểu mẫu, thực thể mục tiêu của bản cập nhật/tạo từ giao diện người dùng web CRM sẽ luôn chứa các giá trị đã thay đổi, vì javascript trong giao diện người dùng CRM sẽ chỉ gửi trong các giá trị đã thay đổi.

Tuy nhiên, nếu bạn đang cập nhật dữ liệu qua một số phương pháp khác (gọi odata, cập nhật C# bằng SDK) và giá trị được bao gồm trong yêu cầu cập nhật chưa thực sự thay đổi, chúng sẽ hiển thị trong Target of the cắm vào. Ví dụ, nếu bạn có một quá trình C# lấy tất cả các thuộc tính cho một thực thể cụ thể, sau đó cập nhật một thuộc tính duy nhất, tất cả các thuộc tính cho thực thể sẽ hiển thị trong đích.

Vì vậy, thực sự mục tiêu không phải là những gì đã thay đổi, nhưng thực thể sẽ là gì sau khi plugin hoàn tất. Bạn sẽ cần bao gồm các thuộc tính trong hình ảnh trước mà bạn muốn kiểm tra các thay đổi để có thể xác định xem giá trị thực sự đã thay đổi hay chưa.

+0

Câu trả lời của bạn cực kỳ phù hợp. Tôi đang cập nhật gps co-ords thông qua Resco Mobile CRM; các plug-in cháy khi lat, hoặc thay đổi lâu dài và chứng minh rằng đại diện bán hàng tại vị trí. Có vẻ như trong trường hợp này tất cả các giá trị trường sẽ được tìm thấy trong localContext.PluginExecutionContext.InputParameters ["Target"], vì vậy tôi sẽ so sánh các giá trị trước ảnh với ["Target"] để xác định xem chúng có thay đổi không. – Bvrce

+0

+1 để sử dụng hình ảnh trước :) – glosrob

Các vấn đề liên quan