Регистрация  |  Вход

Новый релиз на горизонте. New Salesforce release Winter'14

Привет друзья. Вот только только закончилось лето, а Salesforce уже предлагает готовиться к зиме, вернее к зимним изменениям. На горизонте появился новый релиз - Winter'14. Как всегда ожидаем много изменений. Полную информацию по изменениям вы можете найти в release notes. Я в статье упомяну только самые интересные, которые меня зацепили.

Search in Setup (Beta) - поиск страниц, классов, пользователей, профилей непосредственно в разделе Setup. По описанию очень полезная фича, которая позволит значительно ускорить разработку за счет сокращения времени на поиск нужной информации на орге. Напомню, на сегодняшний момент поиск в Setup выполняет роль быстрой навигации по разделам меню.



Freezing User Accounts - "заморозка" пользователя. Позволяет запретить пользователю доступ перед его деактивацией (или на время). Обычно деактивация достаточно тяжелый процесс, которые тянет за собой кучу изменений на орге (sharing, user groups) и часто занимает длительное время. Возможно также в некоторых случаях необходима предварительная ручная работа перед деактивацией. Так вот теперь чтобы пользователь чего не успел натворить до полной его деактивации, его  аккаунт можно заморозить. Заморозка не освобождает лицензию - это для информации.



Using Frontdoor.jsp to Log Into Salesforce - теперь можно отправлять пользователя со стороннего ресурса на Salesforce минуя процесс входа, используя следующий хитрый url




https://<instance>.salesforce.com/secur/frontdoor.jsp?sid=<session_ID>&retURL=<optional_relative_url_to_open>


где instance - префикс сервера где хостится орг, session_ID - идентификатор сессии, который можно получить из access_token (OAuth) или LoginResult (SOAP API), optional_relative_url_to_open - относительный путь к нужной странице (например /apex/SomePage)



Save Order Debug View - в Developer Console появилась новая вкладка Save Order, которая позволяет отследить последовательность DML операций и места, откуда они производились. Очень полезная штука, я думаю. Мне пару раз приходилось ломать голову в поисках места откуда происходило изменение данных в базе, когда в процессе участвовали куча классов и куча триггеров. Обещают что информация будет представлена следующим образом



SaveOrderTabInDeveloperConsole



SOSL Search Support and Query History - все просто и очень приятно видеть эту новую фичу. В Developer Console можно запускать SOSL запросы для отладки, а также видеть историю последних 10 запросов. За историю отдельный поклон :)



Visualforce pages теперь поддерживают HTML5 и JS frameworks (jQuery Mobile, AngularJS, and Knockout). Во-первых появились новые атрибуты для apex тегов, которые рендарятся в валидные HTML5 атрибуты. Во-вторых Visualforce компилятор не должен будет ругаться на разные экзотические атрибуты JS фреймворков. Пока не понятно как отобразится на поддержке старых браузеров. Поживем увидим.



Пример использования HTML5 возможностей:




<apex:page standardController="Contact" extensions="ContactExtras" docType="html-5.0">
<!--
This page expects to be referenced along with the ID of an existing contact record
For example: https://<salesforce_instance>/apex/ContactForm?id=003D000000QB6wh
-->
<apex:form id="theForm">
<apex:pageBlock title="Contact: {! Contact.Name }" >
<apex:pageBlockSection id="contactDetails" title="Contact Details" columns="1">
<apex:inputField value="{! Contact.MobilePhone }" type="tel"
html-placeholder="999-999-9999"
html-autofocus="true"
/>
<apex:inputField value="{! Contact.Email }" type="email"
html-placeholder="you@example.com"
html-pattern="^[a-zA-Z0-9._-]+@example.com$"
html-title="Please enter an example.com email address"
/>
<apex:inputField value="{! Contact.Birthdate }" type="date"
showDatePicker="false"
/>
<apex:inputField value="{! Contact.Pick_A_Number__c }" type="auto"
html-min="0" html-max="100" html-step="5"
html-title="Must be between 0 and 100"
/>
<apex:inputField value="{! Contact.Favorite_Color__c }" type="text"
list="{! colorsList }"
/>
<apex:inputField value="{! Contact.Favorite_Shape__c }"
list="circle,square,rectangle,triangle,hexagon,cube,sphere"
/>
<apex:selectRadio value="{! Contact.LeadSource}" layout="pageDirection"
legendText="Select a source for this contact" borderVisible="true">
<apex:selectOptions value="{! sourcesList }"/>
</apex:selectRadio>
</apex:pageBlockSection>
<apex:pageBlockSection id="contactExtras" title="Contact Extras" columns="1">
<apex:input label="Car Color" value="{! fText }" list="{! colorsList }"/>
<apex:input label="Steps Today" value="{! fNumber }" type="number"
html-min="0" html-max="50000"
/>
<apex:input label="Favorite Date in History" value="{! fDate }"
type="auto"
/>
</apex:pageBlockSection>
<apex:pageBlockButtons location="bottom">
<apex:commandButton id="commandButton" value="Update"
action="{!quickSave}" reRender="theForm"
/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
</apex:page>


 




public class ContactExtras {
public ContactExtras(ApexPages.StandardController controller) { }
// Stub properties, to allow use on the form
// Real code would do something with them, like save to the record
public String fText { get; set; }
public Integer fNumber { get; set; }
public Date fDate { get; set; }
// Create a list of colors (strings) for use in a list attribute,
// for auto-completion via a <datalist>
// The choices come from a picklist custom field; you can use
// the list with any field, not just that picklist field
public List<String> getColorsList() {
List<String> colors = new List<String>();
Schema.DescribeFieldResult picklistColors = Contact.Favorite_Color__c.getDescribe();
for (Schema.PicklistEntry color : picklistColors.getPicklistValues()) {
colors.add(color.getValue());
}
return colors;
}
// Again from a picklist field, convert the values into a list that
// can be used with an <apex:selectRadio> component
public List<SelectOption> getSourcesList() {
List<SelectOption> sources = new List<SelectOption>();
Schema.DescribeFieldResult picklistSources = Contact.LeadSource.getDescribe();
for (Schema.PicklistEntry source : picklistSources.getPicklistValues()) {
sources.add(new SelectOption(source.getValue(),source.getValue()));
}
return sources;
}
}


Statement Limit Elimination - Salesforce убирает ограничения по количеству code statements (напомню, раньше их было 200 000). Теперь SF считает процессорное время. Для синхронных процессов это будет 10 000 миллисекунд и для асинхронных процессов (future, batch) 60 000 миллисекунд. В общее время выполнения кода не будут включаться DML, SOQL, SOSL и Apex callouts.



Вот такие интересные изменения ждут нас с приходом Winter'14. В своей статье я не коснулся изменений, касающихся Chatter, API, Sales. Их очень много, так что кому интересно и полезно будет по работе, приглашаю к изучению официальной документации. Поклонники Salesforce в России смогут попробовать изменения на равне со всем миром, в чем собственно и заключается прелесть облачных технологий.