2012-07-29 8 views
14

Czy istnieje sposób na wykrycie, że wstawiany rekord jest wynikiem operacji klonowania w wyzwalaczu?Wykryj, kiedy rekord jest klonowany w wyzwalaczu

W ramach zarządzanego pakietu chciałbym wyczyścić niektóre niestandardowe pola, gdy skatalogowane są pozycje Opportunity i OpportunityLineItem.

Albo czy spust nie jest właściwym miejscem do zapobiegania klonowaniu niektórych pól?

Rozważałem stworzenie dedykowanego kodu wywołującego sObject.Clone() i wykluczenie pól, które nie są wymagane. Nie wydaje się to idealnym rozwiązaniem dla zarządzanego pakietu, ponieważ wykluczałoby to również wszelkie inne niestandardowe pola Opportunity.

+0

Pomysły: [Clone - zdolność do kontrolowania, które pola są klonowane] (http://success.salesforce.com/ideaview?id=08730000000BpUXAA0) –

Odpowiedz

6

W Apolinie Apex ma dwie nowe metody, które pozwalają wykryć, czy rekord jest klonowany iz jakiego identyfikatora rekordu źródłowego. Możesz użyć tego w swoich wyzwalaczach.

  • isClone() - Zwraca prawdę, jeśli jednostka jest sklonowany z czegoś, nawet jeśli jednostka nie została zapisana.
  • getCloneSourceId() - Zwraca identyfikator obiektu, z którego został sklonowany obiekt.

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject.htm#apex_System_SObject_getCloneSourceId

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject.htm#apex_System_SObject_getCloneSourceId

+0

ten potrzebuje więcej miłości – booky99

1

Nie można wykryć operacji klonowania wewnątrz spustu. Jest traktowane jako operacja "Wstaw".

Nadal można używać dedykowanego kodu, aby wywołać sObject.Clone() i wykluczyć pola, które nie są wymagane. Możesz zapewnić uwzględnienie wszystkich pól przy użyciu informacji opisowych sObject, aby uzyskać wszystkie pola dla tego obiektu, a następnie wykluczyć te pola, które nie są wymagane.

Mam nadzieję, że to ma sens!

Anup

5

Jedno podejście, aczkolwiek rodzaju kludgy, byłoby stworzenie nowego pola, powiedzieć original_id__c, który zostanie wypełniona przez workflow (lub wyzwalacz, w zależności od preferencji dla order of execution), gdy puste z identyfikator Salesforce rekordu. W przypadku nowych rekordów to pole będzie odpowiadać standardowemu identyfikatorowi Salesforce, dla sklonowanych rekordów nie będzie. Istnieje wiele odmian tego, kiedy i jak i co zapełnić pole, ale kluczem jest dać sobie własny haczyk, aby odróżnić nowe i sklonowane rekordy.

Jeśli zależy Ci jedynie na kontrolowaniu doświadczenia dla użytkownika końcowego (w przeciwieństwie do programisty rozszerzającego pakiet zarządzany), możesz zastąpić standardowy przycisk klonowania niestandardową stroną, która usuwa wartości dla podzestawu pól za pomocą url hacking. Są pewne zastrzeżenia, że ​​pole jest edytowalne i widoczne na układzie strony dla użytkownika, który kliknął przycisk klonowania. W chwili pisania tego tekstu nie wierzę, że można spakować standardowe nadpisania przycisków, ale lista możliwych zmian zmienia się wraz z wydaniem.

Powiązane problemy