Не так давно сталкнулся с интерестной проблемой в Salesforce при использовании The AJAX Toolkit.
Пробема состояла в следующем:
Когда весь код был протестирован и собран пакет (которому был дан ПРЕФИКС!), то после этого, все SOQL запросы. а так же DML операции выполняемые при помощи connection.js (The AJAX Toolkit) перестали работать, глянув dev console браузера, вот что увидел - клик.
Оказалось, что данному API плевать, в пакете он или нет, он обращается именно к на данный мамент существующему API Name пакета (который уже содержит префикс).
Решение:
перебил соклы и DML на новый API name (с прификсом), пересобрал пакет - профит!
Не так давно сталкнулся с интерестной проблемой в Salesforce при использовании [url=https://developer.salesforce.com/docs/atlas.en-us.ajax.meta/ajax/sforce_api_ajax_introducing.htm]The AJAX Toolkit[/url]. Пробема состояла в следующем: Когда весь код был протестирован и собран пакет (которому был дан ПРЕФИКС!), то после этого, все SOQL запросы. а так же DML операции выполняемые при помощи connection.js (The AJAX Toolkit) перестали работать, глянув dev console браузера, вот что увидел - [url=http://prntscr.com/9pwpld]клик[/url]. Оказалось, что данному API плевать, в пакете он или нет, он обращается именно к на данный мамент существующему API Name пакета (который уже содержит префикс). Решение: перебил соклы и DML на новый API name (с прификсом), пересобрал пакет - профит!
не знаю, о том же ли я подумал, но с дмл запросами, реализованными через The AJAX Toolkit, например в кастомных кнопках, часто бывает такая проблема, так как АПИ имена вписаны прям в JS.
я собрал unmanaged package, задеплоил в дев Орг, в котором активированы использование "префикса" (для АПМ имен объектов), и все JS кнопки "легли", так как после деплоя у объектов, входящих в package уже другие АПИ имена... пришлось править АПИ в JS...
не знаю, о том же ли я подумал, но с дмл запросами, реализованными через The AJAX Toolkit, например в кастомных кнопках, часто бывает такая проблема, так как АПИ имена вписаны прям в JS. я собрал unmanaged package, задеплоил в дев Орг, в котором активированы использование "префикса" (для АПМ имен объектов), и все JS кнопки "легли", так как после деплоя у объектов, входящих в package уже другие АПИ имена... пришлось править АПИ в JS...
Проще использовать {!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name}
Кстати, интересно, а можно ли в контексте VF страницы, которая внутри managed package, использовать local names в такой записи как выше, и если можно - что произойдёт если в target организации будет объект с таким же именем?
UPD: local names использовать можно, по крайней мере внутри package developer org
Проще использовать {!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} Кстати, интересно, а можно ли в контексте VF страницы, которая внутри managed package, использовать local names в такой записи как выше, и если можно - что произойдёт если в target организации будет объект с таким же именем? UPD: local names использовать можно, по крайней мере внутри package developer org
UPD: local names использовать можно, по крайней мере внутри package developer org
Если не ошибаюсь, если есть 2 объекта с одинаковыми именами, то будет выбран тот что без префикса, если в коде не указан префикс.
[quote="ilya leshchuk"]Проще использовать {!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} Кстати, интересно, а можно ли в контексте VF страницы, которая внутри managed package, использовать local names в такой записи как выше, и если можно - что произойдёт если в target организации будет объект с таким же именем? UPD: local names использовать можно, по крайней мере внутри package developer org[/quote] Если не ошибаюсь, если есть 2 объекта с одинаковыми именами, то будет выбран тот что без префикса, если в коде не указан префикс.
в таком случае My_Custom_Object_API_Name__c вписан в синтаксис, также как если его просто вписать стрингом в строку SOQL операции.
Но, не хочешь ли ты, Илья, нам сказать что в случае использования
система автоматом переправит АПИ имя объекта на Prefix_My_Custom_Object_API_Name__c, как она это делает в АПЕКС коде?
[quote="ilya leshchuk"]Проще использовать {!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} [/quote] в таком случае My_Custom_Object_API_Name__c вписан в синтаксис, также как если его просто вписать стрингом в строку SOQL операции. Но, не хочешь ли ты, Илья, нам сказать что в случае использования [quote="ilya leshchuk"]!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} [/quote] система автоматом переправит АПИ имя объекта на [b]Prefix_[/b]My_Custom_Object_API_Name__c, как она это делает в АПЕКС коде?
ilya leshchuk
!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name}
система автоматом переправит АПИ имя объекта на Prefix_My_Custom_Object_API_Name__c, как она это делает в АПЕКС коде?
На вф страницах, такая вставка генерит имя поля с префиксом и если это работает в кастомных кнопка, то это просто замечательно)
[quote="Den Brown"]Но, не хочешь ли ты, Илья, нам сказать что в случае использования ilya leshchuk !$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} система автоматом переправит АПИ имя объекта на Prefix_My_Custom_Object_API_Name__c, как она это делает в АПЕКС коде?[/quote] На вф страницах, такая вставка генерит имя поля с префиксом и если это работает в кастомных кнопка, то это просто замечательно)
UPD: local names использовать можно, по крайней мере внутри package developer org
Если не ошибаюсь, если есть 2 объекта с одинаковыми именами, то будет выбран тот что без префикса, если в коде не указан префикс.
Зависит от контекста, если вызов в apex'е идёт изнутри managed package, то будет использован объект из managed package, в противном случае, можно было бы легко "ломать" пакеты.
в таком случае My_Custom_Object_API_Name__c вписан в синтаксис, также как если его просто вписать стрингом в строку SOQL операции.
Не совсем так же по двум причинам:
1. Если вы будете мигрировать код и создавать новый managed package, не надо будет менять код.
2. Наличие такой записи {!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} не даст вам просто так удалить это поле, чего не скажешь о простой строке
Но, не хочешь ли ты, Илья, нам сказать что в случае использования
ilya leshchuk
!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name}
система автоматом переправит АПИ имя объекта на Prefix_My_Custom_Object_API_Name__c, как она это делает в АПЕКС коде?
Да, именно это я и хотел сказать - SF разрезолвит full name, единственное, что есть 1% сомнения что будет в VF в случае совпадения имён, как поведёт себя резолв имён.
[quote="wilder"][quote="ilya leshchuk"]Проще использовать {!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} Кстати, интересно, а можно ли в контексте VF страницы, которая внутри managed package, использовать local names в такой записи как выше, и если можно - что произойдёт если в target организации будет объект с таким же именем? UPD: local names использовать можно, по крайней мере внутри package developer org[/quote] Если не ошибаюсь, если есть 2 объекта с одинаковыми именами, то будет выбран тот что без префикса, если в коде не указан префикс.[/quote] Зависит от контекста, если вызов в apex'е идёт изнутри managed package, то будет использован объект из managed package, в противном случае, можно было бы легко "ломать" пакеты. [quote="Den Brown"]в таком случае My_Custom_Object_API_Name__c вписан в синтаксис, также как если его просто вписать стрингом в строку SOQL операции.[/quote] Не совсем так же по двум причинам: 1. Если вы будете мигрировать код и создавать новый managed package, не надо будет менять код. 2. Наличие такой записи [b]{!$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name}[/b] не даст вам просто так удалить это поле, чего не скажешь о простой строке [quote="Den Brown"]Но, не хочешь ли ты, Илья, нам сказать что в случае использования ilya leshchuk !$ObjectType.My_Custom_Or_Standard_Object_API_Name__c.Fields.Some_Field_API_Name__c.Name} система автоматом переправит АПИ имя объекта на Prefix_My_Custom_Object_API_Name__c, как она это делает в АПЕКС коде?[/quote] Да, именно это я и хотел сказать - SF разрезолвит full name, единственное, что есть 1% сомнения что будет в VF в случае совпадения имён, как поведёт себя резолв имён.
Зависит от контекста, если вызов в apex'е идёт изнутри managed package, то будет использован объект из managed package, в противном случае, можно было бы легко "ломать" пакеты.
Мы говорим про AJAX TOOLKIT, а значит вызов из JavaScript. Ну или я чего-то не знаю :)
[quote="ilya leshchuk"]Зависит от контекста, если вызов в apex'е идёт изнутри managed package, то будет использован объект из managed package, в противном случае, можно было бы легко "ломать" пакеты.[/quote] Мы говорим про AJAX TOOLKIT, а значит вызов из JavaScript. Ну или я чего-то не знаю :)
Зависит от контекста, если вызов в apex'е идёт изнутри managed package, то будет использован объект из managed package, в противном случае, можно было бы легко "ломать" пакеты.
Мы говорим про AJAX TOOLKIT, а значит вызов из JavaScript. Ну или я чего-то не знаю :)
Я-то как раз сделал оговорку что поведение зависит от контекста и написал как поведёт себя форс во вполне конкретном контексте, а так-то Ajax Toolkit не до конца указывает на контекст - это код изнутри managed package или снаружи? Если снаружи, то 100% будет использоваться именно родной для target organization объект (в случае совпадения имён), если изнутри - 99,9% что будет использоваться объект из managed package.
[quote="wilder"][quote="ilya leshchuk"]Зависит от контекста, если вызов в apex'е идёт изнутри managed package, то будет использован объект из managed package, в противном случае, можно было бы легко "ломать" пакеты.[/quote] Мы говорим про AJAX TOOLKIT, а значит вызов из JavaScript. Ну или я чего-то не знаю :)[/quote] Я-то как раз сделал оговорку что поведение зависит от контекста и написал как поведёт себя форс во вполне конкретном контексте, а так-то Ajax Toolkit не до конца указывает на контекст - это код изнутри managed package или снаружи? Если снаружи, то 100% будет использоваться именно родной для target organization объект (в случае совпадения имён), если изнутри - 99,9% что будет использоваться объект из managed package.
SF разрезолвит full name
ну это конечно совсем другое дело, тогда хардкодить АПИ в JS нет смысла даже в самых простых кнопках
[quote="ilya leshchuk"]SF разрезолвит full name[/quote] ну это конечно совсем другое дело, тогда хардкодить АПИ в JS нет смысла даже в самых простых кнопках
sforce.connection.defaultNamespace - решает наши проблемы
sforce.connection.defaultNamespace - решает наши проблемы
Век живи, век учись!
Век живи, век учись!