Учиться, учитьcя и еще раз учиться никогда не поздно. Ведь так гласил некогда один из красных постулатов могучего мировоззрения. И ведь поспорить с этим сложно! Вашему вниманию предлагаю без привычных приукрашиваний и протогонических прелюдий содержание тем для сочинений на тему: "А знаете ли вы...". Пару мыслей о Salesforce. Что-то знаете? Зачетки на стол)
1) Скажи-ка дядя, ведь недаром
Передать файл по HTTP запара?
Первая монструозная тема HTTP-request. К доске пойдет...что ж это открытый урок, поэтому ответит пройдоха-экспериментатор:
Максимальный размер данных, которые можно передать по HTTP, например, поместив их в пост составляет около 50 мб.
2) Подруга дней моих суровых,
Функция getDescribe().getKeyPrefix() - родней родных
Порой, чтобы определить, что за объект у вас в могучих ручонках достаточно иметь три первых префикса символа преффикса Id. А получается это дело так
private final static String PREFFIX = ВАШ ОБЪЕКТ.sObjectType.getDescribe().getKeyPrefix();
Балуйтесь, но в меру! Опасайтесь лимитов!
Порой лучше, если у вас есть объект использовать instanceof.
sObject account;
if(account instanceof Account){}
3)А мой навигатор не сделает сбой
А мой навигатор URLFOR
Используя магическую URLFOR, можно например перейти к стандартной страничке редактирования определенного таска вот таким способом:
<apex:outputLink target="_blank" value="{!URLFOR($Action.Task.Edit, task.id,[retURL=URLFOR($Action.Account.View, task.AccountId)], true)}" style>Edit</apex:outputLink>
Также можно использовать и любые кастомные странички вместо Action.Account.View конструкции.
4)Какой SOQL statement можно использовать, чтобы получить все записи, даже те, которые находятся в recycle bin или Achieved Activities
Есть такая панацея как “ALL Rows” в запросе SOQL.
Пример:
SELECT COUNT() FROM Contact WHERE AccountId = a.Id ALL ROWS
Документация по Database.emptyRecycleBin явно намекает, что "After records are deleted from the recycle bin using this call, they can be queried using queryAll() for some time. Typically this time is 24 hours, but may be shorter or longer."
Также для удаленных записей можно использовать isDeleted в связке с ALL ROWS
SELECT Id, isDeleted, LastModifiedBy.Name, LastModifiedDate FROM Account WHERE CreatedDate = TODAY ALL ROWS
5) Да ты такой собственник, или как заблокировать запись в SF, которая не может быть изменена другими пользователями.
Есть и такое лекарство в виде “FOR UPDATE” для SOQL.
Account [] accts = [SELECT Id FROM Account LIMIT 2 FOR UPDATE];
Однако нужно помнить:
1) В одной транзакции заблокированные клиентом данные может изменять только один и только один клиент. Другие юзеры, пытающиеся в данный момент, что либо похимичить над записями обязаны ждать окончание транзакции.
2) Если вы не знаете, заблокирована запись или нет, то вас вежливо попросит QueryException и DmlException
3) If a client attempts to modify a locked record, the update operation might succeed if the lock gets released within a short amount of time after the update call was made. In this case, it is possible that the updates will overwrite those made by the locking client if the second client obtained an old copy of the record. To prevent this from happening, the second client must lock the record first. The locking process returns a fresh copy of the record from the database through the SELECT statement. The second client can use this copy to make new updates.
А на этом пока все. В следующий раз поговорим шпаргалках для самых маленьких в сфере SF.
Передать файл по HTTP запара?
Первая монструозная тема HTTP-request. К доске пойдет...что ж это открытый урок, поэтому ответит пройдоха-экспериментатор:
Максимальный размер данных, которые можно передать по HTTP, например, поместив их в пост составляет около 50 мб.
2) Подруга дней моих суровых,
Функция getDescribe().getKeyPrefix() - родней родных
Порой, чтобы определить, что за объект у вас в могучих ручонках достаточно иметь три первых префикса символа преффикса Id. А получается это дело так
private final static String PREFFIX = ВАШ ОБЪЕКТ.sObjectType.getDescribe().getKeyPrefix();
Балуйтесь, но в меру! Опасайтесь лимитов!
Порой лучше, если у вас есть объект использовать instanceof.
sObject account;
if(account instanceof Account){}
3)А мой навигатор не сделает сбой
А мой навигатор URLFOR
Используя магическую URLFOR, можно например перейти к стандартной страничке редактирования определенного таска вот таким способом:
<apex:outputLink target="_blank" value="{!URLFOR($Action.Task.Edit, task.id,[retURL=URLFOR($Action.Account.View, task.AccountId)], true)}" style>Edit</apex:outputLink>
Также можно использовать и любые кастомные странички вместо Action.Account.View конструкции.
4)Какой SOQL statement можно использовать, чтобы получить все записи, даже те, которые находятся в recycle bin или Achieved Activities
Есть такая панацея как “ALL Rows” в запросе SOQL.
Пример:
SELECT COUNT() FROM Contact WHERE AccountId = a.Id ALL ROWS
Документация по Database.emptyRecycleBin явно намекает, что "After records are deleted from the recycle bin using this call, they can be queried using queryAll() for some time. Typically this time is 24 hours, but may be shorter or longer."
Также для удаленных записей можно использовать isDeleted в связке с ALL ROWS
SELECT Id, isDeleted, LastModifiedBy.Name, LastModifiedDate FROM Account WHERE CreatedDate = TODAY ALL ROWS
5) Да ты такой собственник, или как заблокировать запись в SF, которая не может быть изменена другими пользователями.
Есть и такое лекарство в виде “FOR UPDATE” для SOQL.
Account [] accts = [SELECT Id FROM Account LIMIT 2 FOR UPDATE];
Однако нужно помнить:
1) В одной транзакции заблокированные клиентом данные может изменять только один и только один клиент. Другие юзеры, пытающиеся в данный момент, что либо похимичить над записями обязаны ждать окончание транзакции.
2) Если вы не знаете, заблокирована запись или нет, то вас вежливо попросит QueryException и DmlException
3) If a client attempts to modify a locked record, the update operation might succeed if the lock gets released within a short amount of time after the update call was made. In this case, it is possible that the updates will overwrite those made by the locking client if the second client obtained an old copy of the record. To prevent this from happening, the second client must lock the record first. The locking process returns a fresh copy of the record from the database through the SELECT statement. The second client can use this copy to make new updates.
А на этом пока все. В следующий раз поговорим шпаргалках для самых маленьких в сфере SF.