Конкретный пример - Converted Lead Status.
Очень хочется чтоб
[SELECT MasterLabel FROM LeadStatus WHERE IsConverted = true ORDER BY SortOrder]вернул мне только те LeadStatus, которые возможны для текущего Lead (у которого определенный Record Type).
Конкретный пример - Converted Lead Status. Очень хочется чтоб [code][SELECT MasterLabel FROM LeadStatus WHERE IsConverted = true ORDER BY SortOrder][/code] вернул мне только те LeadStatus, которые возможны для текущего Lead (у которого определенный Record Type).
[url=https://success.salesforce.com/ideaView?id=08730000000gNpLAAU]Idea - Getting Picklist values based on Record Type[/url]
UI API (по ссылке) не знаю не пробовал, но есть злой хак на основе VF + JS
Но я его когда-то давно подсмотрел у Димы Лисовского, поэтому не могу раскрывать способ без его согласия (возможно эта наработка собственность компании). Но способ крайне интересный и элегантный
UI API (по ссылке) не знаю не пробовал, но есть злой хак на основе VF + JS Но я его когда-то давно подсмотрел у Димы Лисовского, поэтому не могу раскрывать способ без его согласия (возможно эта наработка собственность компании). Но способ крайне интересный и элегантный :D
Хотя тут вот погуглил на счет UI API и нагуглил вот такую ссылку
https://salesforce.stackexchange.com/questions/103837/how-do-i-get-the-intersection-of-recordtype-and-picklist-values-inside-apex/202519#202519
Нет под рукой подходящего орга чтобы попробовать но вот этот код выглядит крайне любопытно!
Http http = new Http();
HttpRequest request = new HttpRequest();
String shost = System.Url.getSalesforceBaseURL().toExternalForm();
String url = shost + '/ui-api/object-info/{objectApiName}/picklist-values/{recordTypeId}/{fieldApiName}';
request.setEndpoint(url);
request.setMethod('GET');// set Authorization
request.setHeader('Authorization', 'OAuth '+UserInfo.getSessionId());
HttpResponse response = http.send(request);
Хотя тут вот погуглил на счет UI API и нагуглил вот такую ссылку https://salesforce.stackexchange.com/questions/103837/how-do-i-get-the-intersection-of-recordtype-and-picklist-values-inside-apex/202519#202519 Нет под рукой подходящего орга чтобы попробовать но вот этот код выглядит крайне любопытно! [code] Http http = new Http(); HttpRequest request = new HttpRequest(); String shost = System.Url.getSalesforceBaseURL().toExternalForm(); String url = shost + '/ui-api/object-info/{objectApiName}/picklist-values/{recordTypeId}/{fieldApiName}'; request.setEndpoint(url); request.setMethod('GET'); // set Authorization request.setHeader('Authorization', 'OAuth '+UserInfo.getSessionId()); HttpResponse response = http.send(request); [/code]
Дима, можно сделать простой apex:inputField для Status. Там будут ВСЕ возможные значения для этого Record Type. Я их фильтрую с теми, что мне вернулись из моего запроса. Это не красиво.
Дима, можно сделать простой apex:inputField для Status. Там будут ВСЕ возможные значения для этого Record Type. Я их фильтрую с теми, что мне вернулись из моего запроса. Это не красиво.
По ссылке не только UI API, но и Metadata API (https://github.com/financialforcedev/apex-mdapi)
По ссылке не только UI API, но и Metadata API (https://github.com/financialforcedev/apex-mdapi)
А! Еще можно через Metadata API. Но я надеялся на что-то более простое, чем делать callout и парсить ответ.
А! Еще можно через Metadata API. Но я надеялся на что-то более простое, чем делать callout и парсить ответ.
Да, это. Да не элегантно, но для инициализации SPA подходит.
[quote="Andrii Muzychuk"]Дима, можно сделать простой apex:inputField для Status[/quote] Да, это. Да не элегантно, но для инициализации SPA подходит.
Сорри, не дочитал название темы для конца - что тебе нужно именно в Apex.
Сорри, не дочитал название темы для конца - что тебе нужно именно в Apex.
Не раньше, чем Salesforce добавит обычный простой апекс метод с параметром RecordType.
[quote="Andrii Muzychuk"]Но я надеялся на что-то более простое, чем делать callout и парсить ответ.[/quote] Не раньше, чем Salesforce добавит обычный простой апекс метод с параметром RecordType.
Я только писал, что если ты делаешь кучу своего UI, то норм решение :-)
Я только писал, что если ты делаешь кучу своего UI, то норм решение :-)
Не раньше, чем Salesforce добавит обычный простой апекс метод с параметром RecordType.
Это точно = ))
[quote="Developer"][quote="Andrii Muzychuk"]Но я надеялся на что-то более простое, чем делать callout и парсить ответ.[/quote] Не раньше, чем Salesforce добавит обычный простой апекс метод с параметром RecordType.[/quote] Это точно = ))
Ну, знач сначала у меня был хардкод в Apex. Птм товарищи подумали и решили, что если вдруг (очень малая вероятность, но все-равно) поменяют название статуса, то придется код менять.
Решили сделать Custom Label, в который записывают статус, который надо выставлять. Записи будут одного и того же Record Type.
Я хотел, что б было красиво, но СФ говорит свое "ФЕ" :-)
Ну, знач сначала у меня был хардкод в Apex. Птм товарищи подумали и решили, что если вдруг (очень малая вероятность, но все-равно) поменяют название статуса, то придется код менять. Решили сделать Custom Label, в который записывают статус, который надо выставлять. Записи будут одного и того же Record Type. Я хотел, что б было красиво, но СФ говорит свое "ФЕ" :-)
Я б лучше Custom Settings для этого использовал. Больше по смыслу подходит чем Custom Labels.
Я б лучше Custom Settings для этого использовал. Больше по смыслу подходит чем Custom Labels.
Я их и предложил. Но более опытные Джедаи решили по-своему.
Я их и предложил. Но более опытные Джедаи решили по-своему.
Блин, оказалось что проверка пары Picklist + Record Type происходит чисто на клиентской стороне, а базе вообще пофиг... А то можно было бы просто в цикле завернуть в транзакцию и try..catch и тупо сохранять запись со всеми возможными значениями статуса, те что не отвалились - были бы признаны валидными для Record Type... А по факту оказалось - что базе на это с высокой колокольни и туда можно пропихнуть всё что угодно и это даже не restricted picklist (по крайней мере в организации где я это проверил по-быстрому)
Блин, оказалось что проверка пары Picklist + Record Type происходит чисто на клиентской стороне, а базе вообще пофиг... А то можно было бы просто в цикле завернуть в транзакцию и try..catch и тупо сохранять запись со всеми возможными значениями статуса, те что не отвалились - были бы признаны валидными для Record Type... А по факту оказалось - что базе на это с высокой колокольни и туда можно пропихнуть всё что угодно и это даже не restricted picklist (по крайней мере в организации где я это проверил по-быстрому)