Косяки SALESFORCE о которых вы возможно не знаете

Косяки SALESFORCE о которых вы возможно не знаете

1. Настройки профиля не полностью доступны в метадате. Смотри рис 1.
Переходят только настройки тех аппликейшенс, у которых есть линк "Del"

Пример кусочка одного из профилей

<applicationVisibilities>

<application>BL_Live_Agent</application>
<default>false</default>
<visible>true</visible>
</applicationVisibilities>
<applicationVisibilities>
<application>Chatter_Answers_Moderator</application>
<default>false</default>
<visible>false</visible>
</applicationVisibilities>
<applicationVisibilities>
<application>Live_Agent_Supervisor</application>
<default>true</default>
<visible>true</visible>
</applicationVisibilities>
<applicationVisibilities>
<application>Service_Cloud_Console</application>
<default>false</default>
<visible>false</visible>
</applicationVisibilities>

Все что салесфорс не может выгрузить или загрузить указано
http://www.salesforce.com/us/developer/docs/api_meta/Content/meta_unsupported_types.htm

2. Так же вы должны помнить о зависимостях во время получения метадаты.
Например.

Вам нужно получить перевод Custom Labels, для этого вы так же должны получить и сами Custom Labels иначе вы просто получите пустой файл.

Если вам нужно получить полную информацию о профиле вы так же должны не забыть получить информацию об объектах, лайаутах.

wilder спасибо за информацию.

Отличную тему поднял "Косяки SF"!
Сам на своем веку повидал кучу багов, которые невозможно объяснить с разумной точки зрения SF.

Из последних (доказательства не сохранились, буду объяснять на пальцах):
1. Выкачал в ant метаданные с одного орга чтобы залить на другой. Многие объекты пришли без тега type и конечно орг приемник стал ругаться. Пришлось проставлять вручную всякие data, text и так далее. Глюк? Точно не скажу.
2. Вообще интересный баг заметили мои коллеги на одном проде. В lookup поле записей хранились ID записей которых не существует на орге. Любое обращение к такому полю (для получения связанного объекта) валило internal error. Не помню чем история закончилась, но было не очень весело доказывать заказчику что мудаки в SF а не наша компания.

Итак очередная порция багов. И снова профили

<tabVisibility> - выкачивается только для стандартныз профилей. Для кастомных выкачивается только значение DefaultOn

<userPermissions> - таже самая проблема, выкачивается только если <enabled>true</enabled>

<classAccesses>,<pageAccesses> - тут обратная ситуация, выкачивается вся инфа полностью, что не очень удобно если на орге приемнике нет каких-то классов или страниц.

PermissionSet - invalid parameter value, сам пока не разобрался. Скорее всего присутствует какая-то избыточная информация.

Работая с SalesForce заметил баг с бредскрамбами ("хлебные крошки"), суть в том, что он отрабатывает не корректно на некоторых страницах, т.е. возвращает не туда, куда должен.

Вот буквально вчера наткнулся на интересное поведение ISBLANK функции

// VisualForce

{!ISBLANK(emptyLine)} // false
// where emptyLine = ''

Удалось решить проблему написав:

{!ISBLANK(TRIM(emptyLine))}

Ничего себе сентябрьский БАГопад

Баг от Alex ну вообще ни в какие ворота не лезет.
Надо будет попробовать

- Не корректно отрабатывает порой консоль, особенно при работе с тестами, бывает что неверно отображает покрытие, а бывает что и количество строк кода не верное выдает, часто приходится чистить историю запусков тестов, но и это не панацея, когда поможет, а когда и нет...

- Не корректно отрабатывает чекбокс "Select All". К примеру когда выбрал все айтемы при помощи этого чекбокса, а потом из списка какой нить убрал, то чекнутый чекбокс показывает что все айтемы веделены, для наглядности можно к примеру глянуть страницу, где выбирается какой тестовый метод запустить, там поп-ап, так же данный бажок встречается и в других местах

Roman Bazylev
- Не корректно отрабатывает порой консоль, особенно при работе с тестами, бывает что неверно отображает покрытие, а бывает что и количество строк кода не верное выдает, часто приходится чистить историю запусков тестов, но и это не панацея, когда поможет, а когда и нет...

- Не корректно отрабатывает чекбокс "Select All". К примеру когда выбрал все айтемы при помощи этого чекбокса, а потом из списка какой нить убрал, то чекнутый чекбокс показывает что все айтемы веделены, для наглядности можно к примеру глянуть страницу, где выбирается какой тестовый метод запустить, там поп-ап, так же данный бажок встречается и в других местах

1. Поэтому использую свой тул
2. Нужно создать кейс в салесфорсе, может поможет

wilder
Поэтому использую свой тул

Я для получения покрытия кода из орга писал в свое время тулзу, которая доставала данные через Tooling API.
Тогда использовал python. Получилось очень классно. Параллельно один из разработчиков сделал тоже самое на Java.

Так что этим кто только не занимается

Dmitry Shnyrev
wilder
Поэтому использую свой тул

Я для получения покрытия кода из орга писал в свое время тулзу, которая доставала данные через Tooling API.
Тогда использовал python. Получилось очень классно. Параллельно один из разработчиков сделал тоже самое на Java.

Так что этим кто только не занимается :)

Дело в том что сторонние тулы работают лучше чем родные :)

wilder
Дело в том что сторонние тулы работают лучше чем родные :)

А самописные, ну вообще жгут

Очередной косяк.

Если вы делаете деплой объекта без перевода, то весь перевод который был до этого стирается.

Похожая проблема с ченджсетами. Тут наоборот если вы делаете деплой транслейшена без объекта, то перевод стирается.

Столкнулся сегодня с интересных косяком.

Зашел не прод задеплоить changeSet c одной маленькой VF страничкой. Деплой показал что ОГРОМНОЕ количество ошибок на проде. Это показалось очень странным, потому что коллега деплоил большой changeSet буквально за день до меня и проблем никаких не было, как и изменений на проде.

По ошибкам посмотрели что все тесты валятся на одной строчке:

Profile profile = [select id, Name from profile where name='System Administrator'];

Эта самая безобидная строчка которая может быть в тестах, весь System Administrator же есть всегда.

А вот нет оказывается! Я выполнял деплой под русских пользователем, а для него name уже 'Системный Администратор'. Ну, думаю, ничего страшного, сейчас поменяю на developerName как, например, в RecordTypes делается в таких случаях. А вот и облом - нет такого поля в Profile объекте и вроде нет никаких похожих.

Как бы это не проблема - поменял на инглийский язык и работай дальше.
Но действительно, получается прямо ущемление прав не англоязычных пользователей прямо.

Или там не так все сложно и я преувеличил?

Млин, а проблема то оказывается куда глубже!

Если мне надо знать кто в данные момент работает со страницей, админ или не админ, то получается я уже не могу опираться на Name профиля. А на что тогда могу? На Id? Хардкод? Получается 2 варианта - либо на ровне с Name = "System Administrator" надо проверять Name = "Системный Администратор" ? Или заносить Id системного администратора в Custom Settings и доставать уже оттуда (не забывая при этом на каждом орге эту переменную там создать).

По поводу косяков, я думаю что то что sf не проверяет зарезервирование слова, при создании класов, есть косяком.

Вот сегодня столкнулся с тем что вот такая строчка не работает:

RecortType[] rts = [select id from RecordType where bla-bla];

Ошибка: "illegal assignment from list<record type> to list<record type> at line bla-bla"

Как оказалось кто-то создал enum с именем RecordType.

Alex Tsitsura
По поводу косяков, я думаю что то что sf не проверяет зарезервирование слова, при создании класов, есть косяком.

Вот сегодня столкнулся с тем что вот такая строчка не работает:

RecortType[] rts = [select id from RecordType where bla-bla];

Ошибка: "illegal assignment from list<record type> to list<record type> at line bla-bla"

Как оказалось кто-то создал enum с именем RecordType.

Еще можно класс назвать Test и все упадет)

Не знаю как в новых апиверсиях, но раньше было можно.

Итак очередная порция багов.

apex:iframe - если не использовать параметр height, то салесфорс автоматом выставляет 600px. А это иногда бывает очень лишним, особенно в FF

apex:variable - <apex:variable var="c" value="{!$CurrentPage.parameters.height}" />. Если использовать такую конструкцию, то потом при попытке сохранения <apex:iframe src="{!$Page.devConsole}?id={!OrgSrc__c.Id}&WinH={!c}" height="100%"/> получаем ошибку от салесфорс, что она не может сохранить эту страницу.

Очередной косячок

при попытке сохранить onclick="selectType('{!HTMLENCODE(Item.lastModifiedDate)}',this,5)" - получаем Compilation error: Incorrect argument type for function 'HTMLENCODE()'.

а вот onclick="selectType('{!Item.lastModifiedDate}',this,5)" сохраняется без проблем

Сегодня столкнулся со странным косяком. В эклипс делаю изменения в коде и сохраняю страницу или класс. эклипс молча сохраняет (ошибок нет), показывает что изменения сохранены, а на орге изменения не появляются. Остается старый вариант исходного кода. ЖЕСТЬ! Я уже мозг сломал. Приходится сравнивать исходники из Эклипс и в браузере чисто визуально. Вот это реально Salesforce штормит.

Dmitry Shnyrev
Сегодня столкнулся со странным косяком. В эклипс делаю изменения в коде и сохраняю страницу или класс. эклипс молча сохраняет (ошибок нет), показывает что изменения сохранены, а на орге изменения не появляются. Остается старый вариант исходного кода. ЖЕСТЬ! Я уже мозг сломал. Приходится сравнивать исходники из Эклипс и в браузере чисто визуально. Вот это реально Salesforce штормит.

Теперь ты понимаешь почему я его бросил ? :)

Да, конечно понимаю Но не могу сделать над собой усилие
Свежи еще в памяти мытарства с самим Sublime - не воспринимает мозг Keyboard Shortcuts, а это основная фича данного редактора.

Dmitry Shnyrev
Да, конечно понимаю Но не могу сделать над собой усилие
Свежи еще в памяти мытарства с самим Sublime - не воспринимает мозг Keyboard Shortcuts, а это основная фича данного редактора.

ну так переназначь клавиши, делов то...

не знаю "косяк" ли это...
коллеги заметили, что если в одном сендбоксе сделать на объекте кнопку типа УРЛ с адресом:
apex/myPage?id={!something}
все работает норм.

но если перенести эту кнопку в фул-копи сендбокс, то открывается окно с адресом:
.../servlet/apex/myPage?id=234324324
с ошибкой, что мол нет такого УРЛ

и пришлось дописать слэш:
/apex/myPage?id={!something}
тогда все норм

и не сразу поймешь в чем дело

wilder
ну так переназначь клавиши, делов то...

Не смысл в переназначении, а смысл в их наличии. Я люблю когда все видеть и получать доступ к нужному функционалу в 2-3 клика мышки. А запоминать какая клавиша за что отвечает не очень люблю

Den Brown
и пришлось дописать слэш:
/apex/myPage?id={!something}

Всегда пиши слеш первым в урлах. Это признак того что отсчет будет вестись от корня сайта!
Если слеша не будет будет много проблем. В SF это проблема можно сказать косвенная, а при разработки нормального сайта очень актуальная, да и вообще не это проблема а догма.

Глючный Salesforce
Как можно на простой странице логина иметь 4 ошибки?

Я понимаю что это не критично, и эти ресурсы не нужны для этой страницы, но млин, можно же их и подгружать? Или я чего-то не понимаю?

БЛЯ!!!! Сегодня Eclipse показал себя во всей красе!!!
Не знаю какого х..ра но у меня сохраняются изменения поверх чужих без каких либо предупреждений и ошибок.
Сначала пару раз обратили внимание что пропадают изменения (два человека могут работают с одними и теми же классами) других программистов.
А сейчас провели эксперимент. Я внес изменения, коллега (сидит на MavensMate) попробовал сохранить, получил предупреждение, что есть более новая версия и ему нужно было рефрешнуть класс, чтобы сохранить свои изменения. После этого уже я, без обновления класса, сохраняю и "О, бля, чудо" сохранило ни о чем никого не предупреждая! Все изменения что делал коллега ушли лесом.
КРУТО, как такое вообще может быть? И интересно сколько кода похерилось таким образом?
ps. извините за ненормативную лексику, но других слов просто нет.

Dmitry Shnyrev
БЛЯ!!!! Сегодня Eclipse показал себя во всей красе!!!
Не знаю какого х..ра но у меня сохраняются изменения поверх чужих без каких либо предупреждений и ошибок.
Сначала пару раз обратили внимание что пропадают изменения (два человека могут работают с одними и теми же классами) других программистов.
А сейчас провели эксперимент. Я внес изменения, коллега (сидит на MavensMate) попробовал сохранить, получил предупреждение, что есть более новая версия и ему нужно было рефрешнуть класс, чтобы сохранить свои изменения. После этого уже я, без обновления класса, сохраняю и "О, бля, чудо" сохранило ни о чем никого не предупреждая! Все изменения что делал коллега ушли лесом.
КРУТО, как такое вообще может быть? И интересно сколько кода похерилось таким образом?
ps. извините за ненормативную лексику, но других слов просто нет.

Я тебе что вчера говорил....надо было задуматься :(

Dmitry Shnyrev
Глючный Salesforce
Как можно на простой странице логина иметь 4 ошибки?

Я понимаю что это не критично, и эти ресурсы не нужны для этой страницы, но млин, можно же их и подгружать? Или я чего-то не понимаю?

Это они уже чуток подправили, раньше было хуже.

wilder
Я тебе что вчера говорил....надо было задуматься :(

ВСЁ!!! В строю MavensMate прибыло!!! Eclipse остается в анналах истории.
Я теперь на MavensMate.
Установка конечно посложнее чем у Force.com IDE, но это нормальный процесс для Sumlime Text. Был у меня опыт с этим редактором давно, когда изучал его. Да, там надо установить Package Control. А для самого MM нужен еще Python 2.7 версии и указать путь к Sublime Home Folder (почему-то определил сам неправильно). И в итоге профит. Все работает :))
Сразу в ход пустил быстрый поиск по проекту - ctrl+P и вводим имя - радость неописуемая :))) Это моя любимая фича в Intellij Idea (только там double-Shift). Жаль нет навигации по коду по нажатию на Ctrl + клик по имени класса (например открыть контроллер из страницы.) или переход на метод в том же классе. Или может он есть, только я не нашел?
В общем пока впечатления только положительные, будем надеяться что так и будет дальше

Dmitry Shnyrev
wilder
Я тебе что вчера говорил....надо было задуматься :(

ВСЁ!!! В строю MavensMate прибыло!!! Eclipse остается в анналах истории.
Я теперь на MavensMate.
Установка конечно посложнее чем у Force.com IDE, но это нормальный процесс для Sumlime Text. Был у меня опыт с этим редактором давно, когда изучал его. Да, там надо установить Package Control. А для самого MM нужен еще Python 2.7 версии и указать путь к Sublime Home Folder (почему-то определил сам неправильно). И в итоге профит. Все работает :))
Сразу в ход пустил быстрый поиск по проекту - ctrl+P и вводим имя - радость неописуемая :))) Это моя любимая фича в Intellij Idea (только там double-Shift). Жаль нет навигации по коду по нажатию на Ctrl + клик по имени класса (например открыть контроллер из страницы.) или переход на метод в том же классе. Или может он есть, только я не нашел?
В общем пока впечатления только положительные, будем надеяться что так и будет дальше :)

Я тоже уже пару дней как перешёл. Впечатления тоже строго положительные. Главная фишка что работает все очень быстро.

wilder
Главная фишка что работает все очень быстро.

Это однозначно.

Тащусь от minimap - ориентироваться по коду однозначно проще. Сразу можно перейти в нужный участок большого класса просто кликнув по нему в minimap.

Опять же повторюсь не хватает навигации по методу ctrl + клик по названию метода, чтобы перейти к этому методу, или переменной, чтобы перейти к ее объявлению.

Я думаю про MavensMate можно поднимать старую тему !!!!
и делиться впечатлениями.
Eclipse vs MavensMate

Столкнулся с таким багом. У меня была задача связанная с расшариванием Contacts. По дефолту их OWD привязано к Account, отвязываем и ставим отдельное правило - Private - кнопки расшарить нет. Что только ни делал - другие записи юзер не видит а шаринга на свои нет. Оказалось кнопка есть только если контакт привязать к аккаунту , тогда сразу появляется , если удалить привязку то снова пропадает. Если делать в коде то всё работает нормально, можно шарить и без аккаунтовые, но все равно это бред, получается настройка есть а сэйлсфорс всё равно работает по дефолту.

Новогодний баг

Есть у вас предположим страница и есть там скрипт

<script>

function updateResult() {
jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = html.replace(/&lt;b&gt;/g,"<b>").replace(/&lt;\/b&gt;/g,"</b>");
console.log(html);
jQuery(this).html(html);
});
toggleButtons(true);
}
</script>

реально на странице в браузере видим

<script>

function updateResult() {
jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = html.replace(/&#60;b&#62;/g,"<b>").replace(/&#60;\/b&#62;/g,"</b>");
jQuery(this).html(html);
});
toggleButtons(true);
}
</script>

решение

<script>

function updateResult() {
jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
var startTag = '&' + 'l' + 't;' +'b' +'&' + 'g' + 't;';
var endTag = '&' + 'l' + 't;\/' +'b' +'&' + 'g' + 't;';
var re = new RegExp(startTag,"g");
var re1= new RegExp(endTag,"g");
html = html.replace(re,"<b>").replace(re1,"</b>");
jQuery(this).html(html);
});
toggleButtons(true);
}
</script>

wilder
Новогодний баг

Есть у вас предположим страница и есть там скрипт

<script>

function updateResult() {
jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = html.replace(/&lt;b&gt;/g,"<b>").replace(/&lt;\/b&gt;/g,"</b>");
console.log(html);
jQuery(this).html(html);
});
toggleButtons(true);
}
</script>

реально на странице в браузере видим

<script>

function updateResult() {
jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = html.replace(/&#60;b&#62;/g,"<b>").replace(/&#60;\/b&#62;/g,"</b>");
jQuery(this).html(html);
});
toggleButtons(true);
}
</script>

решение

<script>

function updateResult() {
jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
var startTag = '&' + 'l' + 't;' +'b' +'&' + 'g' + 't;';
var endTag = '&' + 'l' + 't;\/' +'b' +'&' + 'g' + 't;';
var re = new RegExp(startTag,"g");
var re1= new RegExp(endTag,"g");
html = html.replace(re,"<b>").replace(re1,"</b>");
jQuery(this).html(html);
});
toggleButtons(true);
}
</script>

имхо это какой-то костыль

и помоему тебе надо

function updateResult() {

jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = $("<div/>").html(html ).text();!!!!
console.log(html);
jQuery(this).html(html);
});
toggleButtons(true);
}

Maxim Elets
и помоему тебе надо
function updateResult() {

jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = $("<div/>").html(html ).text();!!!!
console.log(html);
jQuery(this).html(html);
});
toggleButtons(true);
}

не. это только по твоему. А мне именно нужно было заменить <b>.*?</b> :)

wilder
Maxim Elets
и помоему тебе надо
function updateResult() {

jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = $("<div/>").html(html ).text();!!!!
console.log(html);
jQuery(this).html(html);
});
toggleButtons(true);
}

не. это только по твоему. А мне именно нужно было заменить <b>.*?</b> :)


Только <b> ?

Maxim Elets
wilder
Maxim Elets
и помоему тебе надо
function updateResult() {

jQuery('ul.li > li').each(function(){
var html = jQuery(this).html();
html = $("<div/>").html(html ).text();!!!!
console.log(html);
jQuery(this).html(html);
});
toggleButtons(true);
}

не. это только по твоему. А мне именно нужно было заменить <b>.*?</b> :)


Только <b> ?

Да. Только это. потому что есть другой баг :)

Ну и баг который меня бесит уже года 3

у вас есть текстовый файл размером скажем 0.5 Мега.

file.split('\n');

И вот эта операция возвращает нам System.LimitException: Regex too complicated

Я помню в далекие 90-е, мой древненький компьютер легко переваривал файлы рзмером в 10 Мега. Понятно что и эту проблему можно решить. Просто надоело уже это все решать.

wilder
file.split('\n');

И вот эта операция возвращает нам System.LimitException: Regex too complicated

сам столкнулся, когда парсил csv файлы... может не баг, но "скрытый" лимит точно...

Я бы советовал всем свои баги постить в качестве кейсов partner community (partner portal). И отчитываться здесь по статусу.

Иначе это просто жалобы на жизнь без какой либо попытки донести ее до тех поддержки и как-то решить.

Вот например, я нашел, что в Environment Hub нельзя создать Group Edition орг. Записал видео с багом, залил на youtube.com и прислал им линк вместе с описанием проблемы.
Проблему они признали и внесли в список known issues - https://success.salesforce.com/issues_view?id=a1p300000008Xd2

yurybond
Я бы советовал всем свои баги постить в качестве кейсов partner community (partner portal). И отчитываться здесь по статусу.

Иначе это просто жалобы на жизнь без какой либо попытки донести ее до тех поддержки и как-то решить.

Вот например, я нашел, что в Environment Hub нельзя создать Group Edition орг. Записал видео с багом, залил на youtube.com и прислал им линк вместе с описанием проблемы.
Проблему они признали и внесли в список known issues - https://success.salesforce.com/issues_view?id=a1p300000008Xd2

Судя по количеству багов мне придется открывать свой канал на ютубе.

Из последнего.

На Lead делаем кнопку со скриптом alert('{!Lead.Id}'); и как думаете что получаем ?... Рандомное число вместо ID

Вчера столкнулся с проблемой что тести, запущение через дев консоль, или через Test Execution, не ранятса на инстансе cs14. Проблема фиксится https://success.salesforce.com/issues_view?id=a1p300000008XgLAAU . Но если тести запускать с помощу еклипса или мавенс мейта, то все ок.

Alex Tsitsura
Вчера столкнулся с проблемой что тести, запущение через дев консоль, или через Test Execution, не ранятса на инстансе cs14. Проблема фиксится https://success.salesforce.com/issues_view?id=a1p300000008XgLAAU. Но если тести запускать с помощу еклипса или мавенс мейта, то все ок.

Проблеме уже почти неделя.
Да и вообще куча проблем на cs* инстансах последнее время.
Словил наверно 5-6 Internal Server Error за неделю.

Gres
Alex Tsitsura
Вчера столкнулся с проблемой что тести, запущение через дев консоль, или через Test Execution, не ранятса на инстансе cs14. Проблема фиксится https://success.salesforce.com/issues_view?id=a1p300000008XgLAAU. Но если тести запускать с помощу еклипса или мавенс мейта, то все ок.

Проблеме уже почти неделя.
Да и вообще куча проблем на cs* инстансах последнее время.
Словил наверно 5-6 Internal Server Error за неделю.

Да и на дев оргах, за вчера вылетело 2 Internal Server Error.
А cs7 на котором я работаю с восьмого января держал тест запущенным http://gyazo.com/817fe43e6a73fc9fa2584e03fe4783cc

Maxim Elets
Gres
Alex Tsitsura
Вчера столкнулся с проблемой что тести, запущение через дев консоль, или через Test Execution, не ранятса на инстансе cs14. Проблема фиксится https://success.salesforce.com/issues_view?id=a1p300000008XgLAAU. Но если тести запускать с помощу еклипса или мавенс мейта, то все ок.

Проблеме уже почти неделя.
Да и вообще куча проблем на cs* инстансах последнее время.
Словил наверно 5-6 Internal Server Error за неделю.

Да и на дев оргах, за вчера вылетело 2 Internal Server Error.
А cs7 на котором я работаю с восьмого января держал тест запущенным http://gyazo.com/817fe43e6a73fc9fa2584e03fe4783cc

У нас вчера проблема с тестами пофиксилась, а то были в запущенном состоянии 3 дня.
Правда как-то покрытие кода считается очень странно.

Ну покрытие это давняя проблема. Где-то пооцентов на 12 врет.

wilder
Ну покрытие это давняя проблема. Где-то пооцентов на 12 врет.

Это еще с того времени, когда они выпилили старый UI для запуска тестов + убрали подсветку и покрытие по классам.
Просто не всегда просто это доказать менеджерам.

Alex Tsitsura
Вчера столкнулся с проблемой что тести, запущение через дев консоль, или через Test Execution, не ранятса на инстансе cs14. Проблема фиксится https://success.salesforce.com/issues_view?id=a1p300000008XgLAAU . Но если тести запускать с помощу еклипса или мавенс мейта, то все ок.

Большое спасибо! хорошо, что вчера это прочел, иначе сегодня бы был в непонятках.

Gres
wilder
Ну покрытие это давняя проблема. Где-то пооцентов на 12 врет.

Это еще с того времени, когда они выпилили старый UI для запуска тестов + убрали подсветку и покрытие по классам.
Просто не всегда просто это доказать менеджерам.

Подсветка есть в девелопер консоли.

Сегодня столкнулся с очень интересной проблемой Salesforce,
а точнее Tooling API.

В общем если сохранять определенный код через Tooling API (использует MavensMate и Developer Console) - то получаем ошибку
Type is not visible: custometype
Если сохраняет через браузер или Metadata API (Migration tools) код сохраняется отлично.

теперь немного подробностей. Погуглил и оказалось что я не одинок. Вот даже идея есть в IdeaExchange
https://success.salesforce.com/ideaView?id=08730000000l8a5AAA
Тут ситуация похожая на мою, только у меня apex class использовался в качестве DTO и передавался в качестве параметра в

<apex:attribute name="..." type="CustomeType" ... />

Вот и все. При чем как вроде бы стало известно эта проблема зависит от орга - у одних все нормально, у меня косяк.

wilder
Подсветка есть в девелопер консоли.

Только она, как не странно, любит съезжать!

Добрые люди подсказали решение. Оказывается весь продвинутый мир MavensMate использует замечательную настройку по умолчанию чтобы использовать старый добрый Metadate API:

"mm_compile_with_tooling_api" : false

Dmitry Shnyrev
Добрые люди подсказали решение. Оказывается весь продвинутый мир MavensMate использует замечательную настройку по умолчанию чтобы использовать старый добрый Metadate API:

"mm_compile_with_tooling_api" : false

Такая же настройка была и в последнем эклипсе.

Свеженький косячок

ctrl_PostInstall onInstall error : SendEmail failed. First exception on row 0; first error: UNKNOWN_EXCEPTION, Object type not accessible. Please check permissions and make sure the object is not in development mode: sObject type 'Document' is not supported

То есть если вы ставите пакет и пытаетесь отправить емайл, но не простой а с документом, то получаем вот такой эксепшен.

Словил сегодня интересный косяк в Developer Console.
По идее это не косяк, но неудобство, которое забрало у меня большой кусок времени чтобы выяснить причину (как всегда простые решения почему-то оставляются на потом).

Если поле у System Administrator не разрешено в FLS (залили например через ant)
то в Developer Console его вообще не существует!
При попытке сделать SOQL запрос выдает
ERROR at Row:1:Column:8 No such column '...'
А если открыть объект на просмотр (File->Open->...) то в списке полей тоже его нет.

Какая-то нелогичная реакция на права доступа.

Dmitry Shnyrev
Словил сегодня интересный косяк в Developer Console.
По идее это не косяк, но неудобство, которое забрало у меня большой кусок времени чтобы выяснить причину (как всегда простые решения почему-то оставляются на потом).

Если поле у System Administrator не разрешено в FLS (залили например через ant)
то в Developer Console его вообще не существует!
При попытке сделать SOQL запрос выдает
ERROR at Row:1:Column:8 No such column '...'
А если открыть объект на просмотр (File->Open->...) то в списке полей тоже его нет.

Какая-то нелогичная реакция на права доступа.


Мне кажется, это логично

Gres
Мне кажется, это логично

Ну мы же в коде не получаем ошибку что такого поля нет, просто нет доступа к значению в данном поле.
А тут я могу понять только одно - поле отсутствует как metadata

Dmitry Shnyrev
Gres
Мне кажется, это логично

Ну мы же в коде не получаем ошибку что такого поля нет, просто нет доступа к значению в данном поле.
А тут я могу понять только одно - поле отсутствует как metadata

Ты уверен, что не получаем?

Ну да, уверен - запрос то я взял с работающего контроллера и просто вставил в Developer Console чтобы увидеть что он возвращает - а он мне тупо заругался что нет таких полей. Apex код - нет ошибок, да и не должно быть, поле то существует.

Dmitry Shnyrev
Ну да, уверен - запрос то я взял с работающего контроллера и просто вставил в Developer Console чтобы увидеть что он возвращает - а он мне тупо заругался что нет таких полей. Apex код - нет ошибок, да и не должно быть, поле то существует.

Просто я получал такую же ошибку в коде. Все еще завист от объявления класса.

Некоторые "косяки" таковыми не являются:

Alex Tsitsura
По поводу косяков, я думаю что то что sf не проверяет зарезервирование слова, при создании класов, есть косяком.

Вот сегодня столкнулся с тем что вот такая строчка не работает:

RecortType[] rts = [select id from RecordType where bla-bla];

Ошибка: "illegal assignment from list<record type> to list<record type> at line bla-bla"

Как оказалось кто-то создал enum с именем RecordType.

Это затенение - вполне нормальное явление.

Dmitry Shnyrev
Сегодня столкнулся со странным косяком. В эклипс делаю изменения в коде и сохраняю страницу или класс. эклипс молча сохраняет (ошибок нет), показывает что изменения сохранены, а на орге изменения не появляются. Остается старый вариант исходного кода. ЖЕСТЬ! Я уже мозг сломал. Приходится сравнивать исходники из Эклипс и в браузере чисто визуально. Вот это реально Salesforce штормит.

Тоже на 99.9% уверен что это не косяк, просто в настройках проекта в Eclipse бывает слетает настройка "Work online", тогда все изменения сохраняются локально и на сервер не деплоятся. Обычно это происходит при смене токена, пароля или IPшника, когда старому проекту не удаётся сразу подрубиться к серверу.

Den Brown
wilder
file.split('\n');

И вот эта операция возвращает нам System.LimitException: Regex too complicated

сам столкнулся, когда парсил csv файлы... может не баг, но "скрытый" лимит точно...


Всё просто - Salesforce limits the number of times an input sequence for a regular expression can be accessed to 1,000,000 times. If you reach that limit, you receive a runtime error.

ilya leshchuk
в настройках проекта в Eclipse бывает слетает настройка "Work online"

Очередной повод проститься с Eclipse.
Не знаю ilya, видел ли ты мои посты про то какие подлянки подкинул eclipse?
В двух словах - не помню при каких обстоятельствах, но при сохранении по ctrl+S eclipse уходил в астрал, а потом оказывалось, то на орге (сандбоксе, где работали сразу несколько разработчиков (знаю что плохо, но не моя прихоть)) ВСЕ файлы проекта оказывались с моими последними изменениями причем даже перетирались более новые изменения других разработчиков. Благо пронесло и все быстро восстановили но это реальное западло. Это кстати случилось 2 раза в промежуток пару дней. После этого я ушел на MM и каждый день только радуюсь.

Привет. Сегодня столкнулся с КРАЙНЕ БОЛЬШОЙ пролемой Salesforce.
Я догадываюсь что ноги растут из одного ограничения, но Salesforce молчит как партизан и тупо не выполняет то что должен, хотя в логах пишет что все ОК!!!!!

Ситуация простая - у меня есть один хеш, который я должен получить из запроса на сторонний сервис и параллельно сохранить в базу для последующего использования в течении следующих 24 часов, а так же записывается в базу две записи логов.
Так вот это я делаю в getter переменной, которая вставляется на страницу при загрузки.
ВСЕ РАБОТАЕТ ОТЛИЧНО!!! Хеш отлично получаю на странице, но 2 DML операции не выполняются - никаких изменений в базе не производится!!! А теперь самое интересное. Вот лог, а вот и 2 DML операции. Операции есть, изменений нет, ошибок нет.

Вот продолжение лога

Да, забыл сказать.
Есть подозрение на ограничение SF в том что нельзя выполнять DML операции в конструкторе т.е. при загрузке страницы (обходится дополнительных action на apex:page) НО где тогда ошибки и относятся ли туда getters?

Возможно у тебя есть savepoint и в эксепшене все откатываетя.

нет ни одного.

НЕ, НУ ТОЧНО!

Вынес инициализацию в отдельный метод на apex:page action
и все сработало. DML операции прошли!!!
Т.е. getter подпадает под ограничение. Но тогда непонятно почему нет никаких сообщений об ошибках. У меня нет ни savepoint и эти операции не обернуты в try/catch.

Ладно, поучительная получилась проблема, много полезного вспомнил

Радует что в воскресный вечер кто-то откликнулся - вижу Wilder все время на связи и Gres заскакивал посмотреть кто тут помощи просит

Dmitry Shnyrev
Радует что в воскресный вечер кто-то откликнулся

У нас рабочая неделя начинается с воскресенья:)

в visualforce email template в Email Subject нельзя использовать

"
. ошибки при этом никакой не выкинет, просто перезагрузит страницу

сегодня внезапно не могу вернуть из метода страницу:

Public PageReference doSubmit() {

return Page.MyPage;

}

пишет:
Compile Error: Initial term of field expression must be a concrete SObject: Integer at line 59 column 12

а с return null и PageReference созданный от URL - все сохраняется...
ничего не понимаю

Den Brown
Compile Error: Initial term of field expression must be a concrete SObject: Integer at line 59 column 12

Возможно вы "затенили" Page.MyPage, создав переменную класса с именем page/Page, попробуйте вернуть System.Page.MyPage.

ilya leshchuk
Возможно вы "затенили" Page.MyPage, создав переменную класса с именем page/Page, попробуйте вернуть System.Page.MyPage.

спасибо Илья, ты как всегда: по-существу и в точку.

есть такая переменная, служит в пагинационном механизме...
сейчас переименную

<apex:actionFunction name="delFile" action="{!delFile}" immediate="true" rerender="btn">
<apex:param name="id" assignTo="{!delId}" value=""/>
</apex:actionFunction>

в контроллер приходит вовсе не переменная delId, приходит параметр ID из URL

<apex:actionFunction action="{!goTo}" name="goTo">

<apex:param name="var1" assignTo="{!var1}" value=""/>
<apex:param name="var2" assignTo="{!var2}" value=""/>
</apex:actionFunction>

не асайнит значения в переменные. решение: добавить reRender="dummyElement"

Да, есть такое. Если не ререндерить, то actionFunction не работает.

Гребанный CORS не работает вообще... Ну просто никак. Нахер они его интересно сделали ???

У меня тоже не работает как в инструкции написано. Но ИМХО это я где-то что-то не то делаю. У индусов вот всё работает )

Нельзя задеплоить IP ranges - валится неинформативная ошибка.
Супорт проблему не хочет фиксить и пытаются сказать что так и должно быть, даже несмортя на то, что написано в официальной документации:
https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_securitysettings.htm

Короче прошу поддержать эту идею -
https://success.salesforce.com/ideaView?id=08730000000oLxKAAU

О...я могу целую сагу написать о том что должно деплоиться а на самом деле не работает. Я запарюсь идеи заводить.

Выкатывай свою сагу, нечего сидеть на жопе ровно)

Читай мои посты в этой теме. Тут есть многое.

https://c.eu5.visual.force.com/apex/help/apex/devImport/apex/help - берет последний /apex/...

так это же фича!!!

yurybond
Нельзя задеплоить IP ranges - валится неинформативная ошибка.
Супорт проблему не хочет фиксить и пытаются сказать что так и должно быть, даже несмортя на то, что написано в официальной документации:
https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_securitysettings.htm

После месяца уговоров, упрямый индийский саппорт все таки создал Konwn Issue:
https://success.salesforce.com/issues_view?id=a1p30000000sXza

Кто-нибудь сталкивался с таких косяком?

https://success.salesforce.com/issues_view?id=a1p30000000T5R5AAK

Test.startTest() не сбрасывает лимиты по SOQL query в тестах.

(?i)\\s*(class|interface|enum)\\s+\\b(.+?)\\b - "Regex too complicated" - проверяю на файлике в 18 килобайт !!!

js справляется с этим на Ура. вот такой вот у нас волшебный клауд.

wilder
(?i)\\s*(class|interface|enum)\\s+\\b(.+?)\\b - "Regex too complicated" - проверяю на файлике в 18 килобайт !!!

js справляется с этим на Ура. вот такой вот у нас волшебный клауд.

Уже писал об этом:
Salesforce limits the number of times an input sequence for a regular expression can be accessed to 1,000,000 times. If you reach that limit, you receive a runtime error.

Просто подправьте регулярку :)

ilya leshchuk
wilder
(?i)\\s*(class|interface|enum)\\s+\\b(.+?)\\b - "Regex too complicated" - проверяю на файлике в 18 килобайт !!!

js справляется с этим на Ура. вот такой вот у нас волшебный клауд.

Уже писал об этом:
Salesforce limits the number of times an input sequence for a regular expression can be accessed to 1,000,000 times. If you reach that limit, you receive a runtime error.

Просто подправьте регулярку :)

Ну если ты можешь, то подскажи как ее подправить. И за одно еще одно дополнение. Падает только на последнем вхождении. Это я тоже как-то могу подправить ? пробовал использовать (?i)\\s*(class)\\s+. Куда еще проще ?

Ну и в догонку. Почему я не могу перехватить exception через try catch ? Тут то я что должен упростить ?

На глаз тяжело подсказывать:
- желательно бы знать поставленную задачу, потому как найти слово class проще методом indexof
- при данной конфигурации regexp'а я бы не рекомендовал пользоваться методом find - слишком накладно по вычислениям
- в случае с высоконагруженной регуляркой я вообще не рекомендую использовать метод find, лучше использовать метод lookingAt, с соответствующим образом переписанными regexp'ами

Вообще сообщение "Regex too complicated" сбивает с толку, выражение не сложное, просто оно много раз применяется, а когда я писал про "подправь регулярку", я немного некорректно выразился - имел в виду комбинация lookingAt и соответствующим образом подправленные regexp'ы.

ilya leshchuk
в случае с высоконагруженной регуляркой я вообще не рекомендую использовать метод find, лучше использовать метод lookingAt, с соответствующим образом переписанными regexp'ами

Ну задача как таковая парсинг апекс классов.

Я конечно любитель оптимизации, но если честно не совсем понимаю, почему такая относительно простая регуллярка валиться на таких крохотных объемах.

А вот регуллярка, которая действительно нужна.

(?i)(\\@RestResource\\s*\\(\\s*urlMapping\\s*=\\s*\'.*?\'\\s*\\))*\\s*(\\@istest\\s*(\\(\\s*seeAlldata\\s*=\\s*.*?\\s*\\))*)*\\s*(global|public|private)\\s*(static|virtual|abstract)*\\s*((with|without)\\s+sharing)*\\s+(static|virtual|abstract)*\\s*(class|interface|enum)\\s+\\b(.+?)\\b\\s*(extends\\s+(.+?))*\\s*(implements\\s+(.+))*\\s*\\{

Я вообще не понимаю, почему я должен использовать разные методы, для выполнения одной и той же операции ? И почему в других языках, это делается простейшими средствами. А у нас это целая пляска с бубном. И хотя я родился в тех местах где как раз практикуют эти пляски, я уже порядком подустал от этих танцев.

Методы разные по задаче и по сути: find - ищет по всей строке, отсюда и "затратность" его, особенно когда используются всякие lookahead, lookbehind, greedy quantifiers, а вот lookingAt - смотрит от текущей позиции, поэтому менее затратный - обломалась регулярка со старта - "давай до свидания!".

Попробовал я твой способ. Вылетает так же на ура, только на большем объеме. Так что вопрос остается открытым.

Ну первый шаг уже сделан, а дорогу осилит идущий!
Я смотрю ты уже кое-где используешь reluctant quantifiers, а попробуй их использовать вообще везде (может понадобится внести изменение в регулярку), в том числе где у тебя "\\s*" поставить "\\s*?"? Может подлечит.

Ну и финальная точка в диспуте о регексе. Есть очень большая вероятность что у них где-то косяк с памятью. Потому что есть взять отдельной файлик на котором вылетает регекс, то он парситься без проблем. А вот если парсить в цикле несколько файлов, вот тогда уже происходит вылет регекса.

Добавлю свои 5 копеек, Regex не нужен!
Можно прекрасно обойтись без него.
Главный плюс - код без него логичнее и понятнее.

wilder
Ну и финальная точка в диспуте о регексе. Есть очень большая вероятность что у них где-то косяк с памятью. Потому что есть взять отдельной файлик на котором вылетает регекс, то он парситься без проблем. А вот если парсить в цикле несколько файлов, вот тогда уже происходит вылет регекса.

- Доктор, меня почему-то никто не замечает.
- Следующий!

Это не косяк с памятью, это лимит в обработчике регулярных выражений, который никто не скрывает:
Salesforce limits the number of times an input sequence for a regular expression can be accessed to 1,000,000 times. If you reach that limit, you receive a runtime error.

Это, кстати, не означает что вы можете вызвать методы find/lookingAt/matches/etc. миллион раз, это счётчик внутренний, сколько раз сам обработчик регулярных выражений обращается к последовательности. К примеру вот такая регулярка (.*)a натравленная на строку "abbbbbbbbbb" (a и 10 b) обратится к последовательности 10 раз.

Да, сообщение "You reached a maximum number of times an input sequence for a regular expression can be accessed!" было бы в сто раз более информативно чем "System.LimitException: Regex too complicated", но об этом тоже уже написал.

Gres
Добавлю свои 5 копеек, Regex не нужен!
Можно прекрасно обойтись без него.
Главный плюс - код без него логичнее и понятнее.

Это верно только от части. Вполне вероятно что можно всегда обойтись без регулярных выражений для решения любой задачи, но вот в 99 из 100 более менее сложных задач решение с регуляркой будет проще и читабельнее. К примеру попробуйте сходу без регулярки решить задачу нахождения сложных комментариев в apex class'е.

Если знаешь как увидеть этот счетчик. Я был бы просто счастлив. Потому как не могу поверить что на 30 простых классах регех срабатывает больше 1 000 000 раз.

Не знаю где такой счётчик посмотреть, да и думаю что это нереально.
А вот по-поводу "30 простых классов" давай представим ситуацию - есть классик который начинается так:

public class Example implements IExample

{

и дальше идёт 10000 символов. На 100% не утверждаю, но уверен что присутствие в исходном регулярном выражении вот этого кусочка (implements\\s+(.+))*\\s*\\{, а точнее кусочка выделенного жирным, заставит процессор регулярных выражений обратиться к последовательности всего-то минимум 10 000 раз. А теперь если ещё добавить в начало файла комментариев, да использовать метод find, то скорее всего эти 10 000 перемножатся на длину коментария. Опять же - информация не проверенная, потому как это реально black box, а базируется на моих знаниях и понимании regexp'ов в форсе. А вот если кусочек заменить на (.+?) - эти 10 000 обращений уйдут. Я бы даже использовал "[^{]" вместо ".".

Ну и последние новости с полей борьбы с регекс.

Илья твой вариант не прокатил, и я очень об этом сожалел.

А вот мой вариант чудно отработал. Я просто заменил \n на пробел. С точки зрения \s что перевод строки что пробел одно и тоже. В общем я считаю что косяк в системе на лицо.

Илья есть у тебя желание собраться и обсудить идеальный парсер Арех? Может еще кто хочет присоединиться ?

Почему бы и нет, тем более что у меня уже есть одна реализация под свои нужды :)

Ну у меня тоже есть. Сейчас проблема только в размере файла для парсинга. У меня ограничение в 150 килобайт и это меня напрягает.

Email: illia.leshchuk at gmail.com
Skype: ilyaleshchuk

Opportunity line item, есть филды


почему на лейауте ListPrice field имеет лейбл Unit Price?

открываю редактирование лейаута

но при редактировании релейтед листа на лейауте opportunity, филд почему-то Unit Price

Транслейшены выключены.

Это баг или где-то можно переименовать лейбл филда?

UPDATE.
Нашёл причину, это не баг, а Rename Tabs and Labels

На такую фигню наступил.

<apex:outputLink value="{!$CurrentPage.Url}" 

target="_parent">Click me
<apex:param name="q" value="true"/>
</apex:outputLink>

параметр кодируется неверно в конечном линке.
Бяка тут $CurrentPage.Url - содержит уже query string.
Как лечить не придумал.

Этот код что делает? Редиректит страницу на саму себя с новым параметром?
А не проще на JS сделать?

Dmitry Shnyrev
Этот код что делает? Редиректит страницу на саму себя с новым параметром?
А не проще на JS сделать?

1. Да редирект.
2. Стараюсь максимально использовать простые (стандартные) решения.

По опыту скажу стандартные решение не всегда являются простыми

Custom_Object__History через Decribe не имеет префикса, хотя и имеет ID, которое начинается с 017...

Опять эти уроды наху...вертили.

В общем теперь на кнопку нельзя повесить скрипт с параметрами. То есть

{!REQUIRESCRIPT('/resource/ssync3__jsAPI/js/jsInit.js?ta=true&rlts=true')}

{!REQUIRESCRIPT('/resource/ssync3__jsAPI/js/jsInit.js?ta=true&rlts=false')}

Отработает только один раз. Вот такая вот оптимизация.

Пора переходить на свой вронтенд - Angular|Backbone|RactiveJS + REST API
и не надо будет бояться мега апдейтов от SF

Прям праздник какой-то

SELECT ApexClassId,CreatedDate,ExtendedStatus,Id,JobItemsProcessed,JobType,MethodName,NumberOfErrors,ParentJobId,Status,TotalJobItems FROM AsyncApexJob WHERE status!='Completed' AND status!='Aborted' AND status != 'Failed'

выдает что есть 3 джоба. Соответственно через UI показывает что нет ничего. Удалить ничего не могу, потому что ParentJobId - null.

Сохранить тоже ничего не могу, не смотря на галочку в настройках. This Apex class has batch or future jobs pending or in progress (Line: 1, Column: 21)

Придется ждать неделю пока почистят.....

Dmitry Shnyrev
вронтенд
- сильно сказано!!! я правда прочитал как "вротенд"

Очередной нежданчик от индусов.

В кастомной кнопке если определить var window.ssEngine = new ssEngineClass("{!$Api.Session_ID}");

получаете ошибку, что они не ожидали ".". То есть определить что-то за пределами кнопки вам не дают. А кнопка в нашем случае это просто функция. Вот такая вот обрезаная область видимости получается.

КАК?
Это ж JS. Он выполняется в браузере. Какие там могут быть области видимости?
Кстати, а почему у тебя стоит
VAR window.someVar ?
Это не должно работать!
должно быть просто window.someVar = ...

Согласен затуп, каюсь :(

Нормально У меня с JS постоянно похожие затупы случаются. Очень часто сижу в консоли сначала свои наработки испытываю.

... создал отдельную тему ...

а линку на новую тему?

"This Apex class has batch or future jobs pending or in progress; This schedulable class has jobs pending or in progress"

И это не смотря на чекбокс что можно деплоить с работающими шедулерами и батчами.

Или еще вот такая ошибка

"This schedulable class has jobs pending or in progress"

В общем что-то они там перемудрили.

Зато Lightning внедрили который никто не знает как использовать

Косяк при обновлении пакета.

Если вы в пакете поменяли RemoteSite Settings, то вам придется удалить пакет и поставить заново, что бы ваши изменения попали в орг. Возможно это справедливо и для других MetaDataTypes

Если вы в пакете на странице используете StandardController и не используете sidebar="true" или если вы не используете <apex:....> то приготовтесь к тому что получите ошибку что вы не выбрали соответствующие поля.

я для этого использовал <apex:variable var="orgName" value="{!OrgSrc__c.Name}"/>, тогда и поля нормально появляются причем все, а не только то что указано, а так же namespace prefix пакета нормально ресолвится.

А почему бы не использовать этот метод из StandardController
public Void addFields(List<String> fieldNames)
Добавляешь поля которых тебе не хватает, или все просто перечисляешь и все нормально работает.

Dmitry Shnyrev
А почему бы не использовать этот метод из StandardController
public Void addFields(List<String> fieldNames)
Добавляешь поля которых тебе не хватает, или все просто перечисляешь и все нормально работает.

А у меня вообще нет контроллера на этой странице

Ну это аргумент

Dmitry Shnyrev
public Void addFields(List<String> fieldNames)

Я пробывал потом это чудо покрывать в тестах,косяки какие то начинались, проще запрос написать и вытащить все что надо, чем парится с AddFields

Кстати да! В тестах эта команда не работает!
НО! Это уже твои терки - смысл в том что когда работает страница - это забота SF собрать поля со страницы, отправить их в запрос и вернуть тебе в конструктор. В тестах если ты присмотришься то ты сам создаешь StandardController из записи которую сам подготовил. Кто мешает в эту запись добавить все нужные поля?
Но вообще вариант с дополнительным запросом очень даже отличный. Сам так делаю, когда лень с addFields заморачиваться. Ну да - лишний SOQL получается, но это можно пережить

Ура товарищи, дрстигнут новый лимит !!!

Failed to process the request successfully. Cause(LIMIT_EXCEEDED): LIMIT_EXCEEDED: Too many files in retrieve call, limit is: 10000

Прям праздник сегодня

Failed to process the request successfully. Cause(LIMIT_EXCEEDED): LIMIT_EXCEEDED: The retrieved zip file exceeded the limit of 419430400 bytes.

Wilder, ты по ходу решил SF на прочность проверить ?
смотри, а то они тебя скоро забанят - как злосного пожирателя лимитов

Dmitry Shnyrev
Wilder, ты по ходу решил SF на прочность проверить ?
смотри, а то они тебя скоро забанят - как злосного пожирателя лимитов :D

Да я тут собственно не причем. Просто нужно было сделать BackUp всего орга. И тут началась свистопляска с бубном. Орг на бумаге UNLIMITED, как на практике оказалось нет зато и пакет свой проверил на прочность. Хватанул пару не приятных проблем. Вот сейчас сижу думаю как обойти.

Угадайте ошибку:

String currentAccountId = '';

for(Contact record : contacts) {
if (currentAccountId != record.AccountId) {

}
}


:)

Gres
Угадайте ошибку

Так Типы разные. Хоть по сути все Стринга.
На одном проекте долго искал ошибку пока не нашел примерно такую конструкцию. Id то может быть полный или сокращенный)

Line: 2, Column: 22
Variable does not exist: contacts

Line: 4, Column: 1
System.StringException: Invalid id:

Но вообще да, интересно тут с типами работают в твоем примере.

И думаю String currentAccountId = null прокатил бы или
Id currentAccountId = null

Gres
:)

Gres, но мне кажется вопрос с подвохом А?

DevNull
Id то может быть полный или сокращенный)

Да, по ходу DevNull, ты прав. Чет я про это не подумал Давно не сталкивался с такой проблемой.

Dmitry Shnyrev
Gres, но мне кажется вопрос с подвохом А?

Странно, что приведение идет не к базовому типу, а к наследнику

Итак порция косячков
1.ReadMetadata - не работает с ApexClass, ApexTrigger
2.ReadMetadata возвращает то Base64 то String в зависимости от типа метадаты.

Если вы используете HTML-5.0 и используете конструкции вида:

<apex:inputfield html-dType="test" .../>

то будьте готовы к тому что Salesforce похерит все ваши аттрибуты для dependent picklist

Очередной баг при работе с ToolingApi при

SELECT Id, DeveloperName, EntityDefinitionId, NamespacePrefix FROM CustomField

получаю DeveloperName = '_tc__00N58000002ZJUC__19' я понимаю что 00N58000002ZJUC это типа ссылка на другое поле. Но что-то это особенно пока не помогает.

Проголосуйте плиз за идею - https://success.salesforce.com/ideaView?id=08730000000DfdiAAC

Если в строке встречаются символы например из английского и арабского алфавита то indexOf() всегда возвращает -1

Например вы делаете интеграцию из Salesforce в Salesforce через tooling API. И хотите запустить тесты в которых есть httpmockup ? Не судьба. Получите http loop fallout exception.

Wilder все продолжает ломать Salesforce

Internal Server Error

for (ApexLog item : [SELECT Id FROM ApexLog LIMIT 1]) {

ApexPages.StandardController sc = new ApexPages.StandardController(item);
sc.delete();
}

А можешь пояснить в 2 словах что ты в этом кусте такое делаешь?
Или это просто пример для воспроизведения ошибки?

Dmitry Shnyrev
А можешь пояснить в 2 словах что ты в этом кусте такое делаешь?

Удаляет запись salesforce лога. Только вот у них нет PageReference и сало ломается.
В сале не думали, что люди будут экспериментировать с такой фантазией.

Developer
Dmitry Shnyrev
А можешь пояснить в 2 словах что ты в этом кусте такое делаешь?

Удаляет запись salesforce лога. Только вот у них нет PageReference и сало ломается.
В сале не думали, что люди будут экспериментировать с такой фантазией.

Я даже боюсь спросить, что-такое "сало" :D

Я думаю SF)

Developer
Удаляет запись salesforce лога.

А почему именно так? В чем преимущество простой DML операции?

camamber
Я даже боюсь спросить, что-такое "сало" :D

Насколько я могу судить это понятие придумали в VRP, потому что кроме них я больше ни от кого такого не слышал. А они постоянно салом кидаются.
Но мне понятие "сало" сильно режет слух!!! Я категорически против его использования. Это прям какое-то неуважение к платформе которая позволяет зарабатывать на хлебушек с икоркой.

Dmitry Shnyrev
А почему именно так?

Наверное, надо автора кода спросить?

Dmitry Shnyrev
В чем преимущество простой DML операции?

Эмм...Так тут же не простая DML операция.

Dmitry Shnyrev
Насколько я могу судить это понятие придумали в VRP, потому что кроме них я больше ни от кого такого не слышал. А они постоянно салом кидаются.
Но мне понятие "сало" сильно режет слух!!! Я категорически против его использования. Это прям какое-то неуважение к платформе которая позволяет зарабатывать на хлебушек с икоркой.

В данной ситуации - лень переключать раскладку на английскую, когда пишешь на русском и сокращённо получается то что получается...
п.с. если режет, то буду переключать раскладку :)

Developer
Наверное, надо автора кода спросить?

А, мли, не усмотрел что это не автор ответил.
То что делает код в принципе понятно,
Но в руках wilder любой код может делать совсем не то что он должен!
Developer, не спеши наперед батьки в пекло!!!
Вопрос адресовался именно автору и подразумевает получение информации о подвохе!

Developer
лень переключать раскладку на английскую

А ты не пользуешься Punto Switcher?

Если нет, то я понимаю твою попаболь по поводу раскладок

Dmitry Shnyrev
А ты не пользуешься Punto Switcher?

Не срослось у меня с ним когда-то, когда он больше вредил, чем помогал, неправильно определяя нужную раскладку и переписывая то, что я написал.

Потому что автоматическое переключение надо сразу было отключить. Я сразу отключил.
Переключение только по нажатию Break(Win) и Alt(Mac).
Зато начинаешь печатать "не в той" раскладке просто нажал на волшебную кнопку и продолжаешь дальше печатать.
Вместо того чтобы удалять переключаться и сново печатать.
От этой привычки у меня сильная проблема взаимодействия с чужими компами, благо это редкие случаи.

Просто удалить логи не получается. Даже не смотря на то что он deletable.

Просто очень не хотелось задействовать bulk API.

Иногда прокатывает что-то удалить через standard controller.

Может кто нибудь сталкивался, не работает метод sforce.console.isInConsole() на visualforce странице? Независимо от того происходит ли это в service console или в обычном сейлсфорсе всегда выдает true.
Скрипт <apex:includeScript value="/support/console/42.0/integration.js"/> включен на странице.
Попытался залезть в соурс код, но чего то там такие дебри, что не хочется пока лезть. Возможно кто то знает в чем проблема и как ее можно решить?
Открывать тикет сейлсфорсу и связываться с индийской службой поддержки пока что тоже не хочется
Заранее спасибо

Выяснил, что если в URL передавать isdtp=vw то sforce.console.isInConsole() будет всегда выдавать true. Независимо открываешь страницу в консоле или нет. По крайне мере у меня так. Не знаю относиться ли это к косякам Salesforce или я чего то не до конца понимаю просто :)

AntonB
isdtp=vw

Это недокументированный параметр, поэтому использовать его можно на свой страх и риск.
Врядли это можно назвать косяком SF. Но то что упомянул его на форуме спасибо.
Я такого не использовал, но сразу нагуглил такую замечательную статью
http://salesforcelearn.blogspot.com.by/2016/04/use-of-isdtp-parameter-in-url-in.html
Внизу кстати так и написано что это хак.

Хотя вру . Использовал. Но тоже как злой хак.
вот тут
https://salesforce-developer.ru/forum/topic-adaptirovanie-vf-stranits-dlya-raboty-v-lightning-mode
isdtp=p1

Вроде пацаны сделали хорошую опцию -

Select "Don't create an opportunity" by Default in Convert Lead Window
. Но у меня она почему-то не работает. Что-то еще нужно кроме поставить галку?
.

Блин, только для Lightning.

При оплате подписки на data.com, в salesforce создаются поля вроде CompanyDunsNumber на лиде. Выглядят как стандартные поля, находятся в секции стандартных полей, постфикса "__c" нет.
Решили отменить подписку, что успешно сделали пару месяцев назад. Сегодня всплыла проблема - поля, которые созданы благодаря подписке data.com тихо исчезли с прода и всех связанных sandboxes. Никаких notifications не приходило. НО - эти поля использовались в коде, в триггерах/классах. Код просто перестал работать, выдавая ошибку, что пытаемся зареференсить несуществующее поле. Пришлось срочно выпиливать логику, связанную с этими полями и заливать на прод без нее.
Аккуратно подготовьтесь к отмене подписки data.com. Поля, которые создаются при подписке, можно найти в документации. Например, для лида: https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_lead.htm?search_text=Lead ищите фразу "This field is only available to organizations that use Data.com Prospector or Data.com Clean.". На лиде создается всего 1 поле. Зато для аккаунта таких полей уже 5 https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_account.htm?search_text=Lead .

SOSL FIND {project} IN All FIELDS RETURNING User(Id,LastModifiedBy.Name,Name ORDER BY Name DESC)

BAD RESPONSE: [{"message":"No such relation 'LastModifiedBy' on entity 'User'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.","errorCode":"INVALID_FIELD"}]

Падает если его делать через /services/data/v42.0/tooling/search и не падает если его делать через /services/data/v42.0/search

Объект : cleanDataService

[Parameters]

name : CleanDataService
labelPlural : Data Services
label : Data Service
keyPrefix : 07S

[Settings]
updateable : true
undeletable : false
triggerable : false
searchable : true
retrieveable : true
replicateable : false
queryable : true
mruEnabled : false
mergeable : false
layoutable : false
isSubtype : false
hasSubtypes : false
feedEnabled : false
deprecatedAndHidden : false
deletable : true
customSetting : false
custom : false
createable : true
activateable : false

При попытке запустить SOSL
выдает [{"message":"cleanDataService is not searchable","errorCode":"INVALID_TYPE"}]"

Объект - GlobalValueSet на самом деле sharedPickListDefinition
.

wilder
SOSL FIND {project} IN All FIELDS RETURNING User(Id,LastModifiedBy.Name,Name ORDER BY Name DESC)

BAD RESPONSE: [{"message":"No such relation 'LastModifiedBy' on entity 'User'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.","errorCode":"INVALID_FIELD"}]

Падает если его делать через /services/data/v42.0/tooling/search и не падает если его делать через /services/data/v42.0/search


У нас схожее было в тестах. Как-то решил эту проблему?
Мы в итоге пришли к try-catch в тесте с проверкой текста ошибки, что не лучшее решение, на мой взгляд.

EvAzi
Как-то решил эту проблему?

Неа. Я просто сделал анализ всех обьектов и нашел аномалии.

Ну это уже ни в какие ворота

FIND {devConsoleApp} IN All FIELDS RETURNING ApexPage(Id,LastModifiedBy.Name,Name ORDER BY Name DESC)

не находит страницу с именем devConsoleApp

через SELECT ясное дело что все работает.

Волшебный поиск.

Допустим у вас есть LongText поле и в нем у вас храниться некий текст. В тексте есть GUID.

Волшебный поиск. Это тот который сверху находит только цифры из этого GUID.

Пример GUID

1667f7cf-6b23-1d53-1b2b-e99a070001e8

Если искать по 1667f7cf-6b23-1d53-1b2b-e99a070001e8 не находит. Если искать по 1667 или по 070001 находит. Как только пытветесь искать 1667f - нет результатов.

Косяк в Data Import Wizard:
Попробовал пройти Hands-on Challenge
Your text to link here...
В Data Import Wizard загруз на этапе Edit Field Mapping: Accounts and Contacts.
Когда выбрать поле в столбце Mapped Salesforce Object и нажать Map, то всплывает модальное окно, которое нельзя передвигать, а его кнопки Сanсel и Map закрыты нижней панелью [Cancel-Previous-Next], модальное окно оказалось под этой панелью. Это и в Chrome и в Opera. IE у меня вообще не высвечивает кнопку залогиниться (в Trailhead), Mozilla ставить влом, еще и там разочароваться... Похоже, что они задали жесткие размеры модального окна и не учли мониторы ноутбуков, которые меньше стационарных 17-дюймовок.
...
Попробовал на 17-дюймовом мониторе - получилось. Значит Data Import Wizard на ноутбуках не работает.

Один и тот же SOQL в классике работает в Lightening нет. Объяснений пока нет.

wilder
Один и тот же SOQL

А пример можешь скинуть?

Dmitry Shnyrev
wilder
Один и тот же SOQL

А пример можешь скинуть?

Уже не актуально. Нашли в чем косяк.

В классике id 15 символов в молнии 18. Поля формул тоже принимают 15. Здесь и был косяк.

Interesting information? Help us, post link to social media..