Welcome to TechNet Blogs Sign in | Join | Help

Использование javascript в schema.xml. Некоторые особенности Calculated и Computed полей.

Мультик был такой в интернете (давно и не очень популярный). Про композитора Ушами. К сожалению играть на нервах ушами я не умею, зато ушами отлично получается делать финты.

Все начиналось с простой задачи. Сделать индикатор в виде светофора. Это должно быть после списка в котором отображается картинка (красная, зеленая или желтая).  Если документ просрочен, то отображается красная картинка, если до срока осталось 3 дня -то желтая, иначе зеленая.

Сначала решили сделать в списке Calculated поле. Сделать формулу труда не составило. Все условия есть, функций для работы с числами и датами много. Только вот одно но. Не рекомендуется использовать Today. А следовательно в реальном времени (без пересохрания элемента списка) сменить картинку индикатора нам не удастся при наступлении следующих суток картинка останется прежняя не зависимо от дат.

Бросила я затею с Calculated полем и решила сделать на основе Computed. В нем можно использовать Today. Поле перерисовыввается без пересохранения элемента списка, то есть в реальном времени. Только вот одно но (да, опять и еще одно). Нету у него нормальной работы с условиями. Можно проверять только на "=", а вот например на ">=" или "<=" нельзя.

И тут пришла идея поместить в тэг <HTML><![CDATA[ ]]></HTML> самый настоящий javascript, который бы проводил все рассчеты с датами и выводил бы картинку.

Когда это первый раз заработало описание поля в schema.xml выглядело следующим образом:

<Field  ID="{FC9947C8-F094-45ff-854D-A6F7E9E5CF4C}"

       Name="Indicator"

       StaticName="Indicator"

       Type="Computed"

       ReadOnly = "TRUE"

       DisplayName="$Resources:dplists, dpincdocfieldindicator;"

       Required="TRUE" Filterable="FALSE">

        <FieldRefs>

          <FieldRef Name="ID"/>

          <FieldRef Name="EndDate"/>

       </FieldRefs>

        <DisplayPattern>

              <HTML><![CDATA[<img src="http://blogs.technet.com/_layouts/images/kpidefault-2.gif" name="indicator]]></HTML>

              <Column Name="ID" />

              <HTML><![CDATA[" id="indicator]]></HTML>

              <Column Name="ID" />

              <HTML><![CDATA[" border="0" />]]></HTML>

 

              <HTML><![CDATA[<script type='text/javascript'>]]></HTML>

              <HTML><![CDATA[var myImg         = document.getElementById("indicator"+]]></HTML>

              <Column Name="ID" />

              <HTML><![CDATA[);  ]]></HTML>

              <HTML><![CDATA[var today         = new Date();  ]]></HTML>

              <HTML><![CDATA[var threedaysafter= new Date( (new Date()).setDate(today.getDate() + 3) );  ]]></HTML>

              <HTML><![CDATA[var enddate_arr   = "]]></HTML>

              <Column Name="EndDate" />

              <HTML><![CDATA[".split(".");]]></HTML>

              <HTML><![CDATA[var enddate       = new Date(Date.parse(enddate_arr[2]+"/"+enddate_arr[1]+"/"+enddate_arr[0]));  ]]></HTML>

              <HTML><![CDATA[enddate           = new Date(enddate.setTime(enddate.getTime()+86399990));  ]]></HTML>

 

 

              <HTML><![CDATA[if(enddate >= today && enddate <= threedaysafter ) { ]]></HTML>

              <HTML><![CDATA[myImg.src = "/_layouts/images/kpidefault-1.gif"; } else ]]></HTML>

              <HTML><![CDATA[if(enddate > today )  {]]></HTML>

              <HTML><![CDATA[myImg.src = "/_layouts/images/kpidefault-0.gif";  }]]></HTML>

 

              <HTML><![CDATA[</script>]]></HTML>

        </DisplayPattern>

      </Field>

В результате получилась вот такая вот штуковина:

Ссылки:

Calculated Field Formulas:  http://msdn.microsoft.com/en-us/library/bb862071.aspx

Schema.xml: http://msdn.microsoft.com/en-us/library/ms459356.aspx

Field Element: http://msdn.microsoft.com/en-us/library/ms437580.aspx

 

Published Thursday, July 16, 2009 10:48 PM by tvsmetanina

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# re: Использование javascript в schema.xml. Некоторые особенности Calculated и Computed полей.

В результате получилось не портируемое решение на SharePoint 2010 :(  

Friday, July 17, 2009 1:37 AM by Michael

# re: Использование javascript в schema.xml. Некоторые особенности Calculated и Computed полей.

Я бы все таки сделал свой FieldType.

Friday, July 17, 2009 2:37 AM by Farsight

# re: Использование javascript в schema.xml. Некоторые особенности Calculated и Computed полей.

FieldType - пытались делать. Правда времени было мало. Там все те же проблемы. Сложно сделать так, чтобы поле обновлялось в реальном времени, при этом умело показываться в представлениях и на форме просмотра элемента списка.

Friday, July 17, 2009 3:41 AM by tvsmetanina

Leave a Comment

(required) 
required 
(required) 

  
Enter Code Here: Required
 
Page view tracker