Категория Архивы: jQuery и SharePoint

Преодолеть раздражает проблема с относительные URL-адреса SharePoint быстрый запуск

Я хотел бы добавить ссылку на панель быстрого запуска навигации другой день и сказал мне, SharePoint:

image

Чистая текстовой версии, является:

Убедитесь, что URL-адрес является допустимым и начинается с любой допустимый символ (знак номера (#) или косой (/)) или действительный поддерживаемый протокол (Например, ' http://’, ' https://’, ' файл://’, ' ftp://’, ' mailto:’, ' Новости:’).

«Blech и оспа!«Я сказал.

Обходной путь для этого — использовать JavaScript, чтобы найти известный ссылку в области быстрого запуска и переопределить его поведение.

Проверить это, Добавьте новую ссылку на ваш сайт тест константы выглядит так:

image

Я использовал jQuery. Для ее решения, получите некоторые JavaScript и jQuery на страницу, с помощью вашей любимой техники и с строки кода, как это:

 

$(документ).готов( функция () {

    $("в:содержит(«Тест замена URL-адрес»)").Нажмите кнопку(функция () { предупреждение("поведение изменения щелчка!"); возвращение ложь;});

});

И Боб ваш дядя.

JQuery селектор находит каждый <в> тег, который имеет «Проверить URL замену» в его названии. Вы можете найти tune, в зависимости от вашей ссылке и такие.

Добав(функция() переопределяет все SharePoint сделали бы если пользователь нажал кнопку. Убедитесь, что вы «возвращение ложных», или же он будет делать ваши вещи и затем попытаться href вещь слишком, Это почти наверняка не ваша цель.

Это было сделано и тестирования в среде SharePoint online, но должны работать хорошо в 2010 и раньше тоже.

</конец>

undefinedПодписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

Быстрый и простой: Решить «Недопустимый URL параметр” проблема с UpdateListItems в lists.asmx

При работе с UpdateListItems через lists.asmx, Это легко генерировать ошибки:

Недопустимый URL-адрес параметра.

Предоставляет URL-адрес содержит недопустимые команды или значение. Пожалуйста, проверьте URL-адрес снова.

Вы можете получить эту ошибку, когда вы забыли включить ID в списке полей для обновления.  Это, как много этих SP веб-служб, Это немного парадоксально, так как вам нужно включить идентификатор в атрибуте ID <Метод> элемент.  И вы не обновляется ID и вероятно никогда не хотят в первую очередь.

Этот конверт SOAP работает:

<soapenv:Конверт xmlns:soapenv =' http://Schemas.xmlsoap.org/soap/envelope/'>
  <soapenv:Тело>                      
    <UpdateListItems xmlns =' http://Schemas.Microsoft.com/SharePoint/SOAP/'>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <обновления>                     
         <Пакетная OnError =«Продолжать">
          <Метод ID =«1" Cmd =«Обновление">
            <Поле имя =«CooperativeLock">к морю!</Поле>
            <Поле имя ="ID">1</Поле>
          </Метод>
        </Пакетный>                     
        </обновления>                
      </UpdateListItems>             
  </soapenv:Тело>         
</soapenv:Конверт>

Если вы вырезать ссылку на идентификатор в поле, то вы получите раздражает сообщение «Недопустимый URL параметр».

</конец>

undefinedПодписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

 

Бедный человек при кэшировании в JavaScript

[TL;Д-р версии: Используйте cookies для хранения результатов асинхронных вызовов; немедленно отображать результаты последних асинхронных вызовов, а затем проверить их после загрузки страницы.]

Я работаю на сайте интрасети SharePoint для клиента, что особенности, среди прочего, стилизованные вторичных навигации, чьи параметры меню управляются через регулярные старый пользовательский список.  Идея заключается в том, что клиент получает для управления меню «их» сайта не затрагивая или под воздействием глобальной навигации, потушить его.

(есть что-то невероятно подрывной о добавлении CEWP, указывающий на файл HTML, который загружает некоторые CSS и JS, чтобы коренным образом изменить почти все о сайте поведение..., но это для другой должности)

Код для этой довольно простой:

  • Ждать окончания загрузки и сделать асинхронный вызов загружать элементы меню из списка с помощью отдыха или lists.asmx или любой другой страницы
  • С помощью jQuery, динамически заполнять кучу, если <ли>в внутри родительского <UL> (Кристиан Пиндер в статье здесь упрощенное объяснение этой tecnnique)
  • Используйте CSS, чтобы делать все форматирование
  • Прибыль!

Больное место здесь является то, что каждый раз, когда кто-нибудь хитов одной из страниц сайта, веб-браузер пользователя выходит для получения элементов из списка.  После того, как dev, является полной и тестирования доказал вещи, чтобы быть стабильной и полной, Этот вызов не требуется более чем 99% времени, так как меню редко меняется.  Она также имеет странно влияют на пользовательский интерфейс, который является общим в этом дивном новом мире гипер ajaxy веб-сайтов – страница отображает и только тогда меню визуализации.  Это нервный и отвлекает на мой взгляд.  И нервный. Таким образом, кэширование. 

Я изменил логику константы выглядит так:

  • Найдите файл cookie в браузер, который содержит меню, как прошлый раз
    • Если найдено, сделать это немедленно.  Не ждите окончания загрузки страницы.  (Вам нужно убедиться, что ваш HTML стратегически размещены здесь, но это не трудно сделать).
  • Ждать окончания загрузки и сделать асинхронный вызов загружать элементы меню из списка с помощью отдыха или lists.asmx или любой другой страницы
  • Сравните, что я получил от cookie
    • Если он соответствует, ОСТАНОВКА
    • В противном случае, с помощью jQuery, динамически заполнять кучу, если <ли>в в <UL>
  • Используйте CSS, чтобы делать все форматирование
  • Прибыль!

Некоторые из вас собираетесь сказать, «Эй! Существует без реальных кэширования происходит здесь, так как вы читаете меню все равно Каждый раз.”  И вы правы-я не давая сервера любого вида отдыха.  Но поскольку вызов асинхронного и происходит после начальной страницы HTML полезной нагрузки полностью оказывает, Он «чувствует» более чутко для пользователя.  Меню предоставляет довольно много, как рисует страницы.  Если меню происходит с изменением, пользователь подвергается нервным повторно нарисуйте меню, но только что один раз.

Есть несколько способов сделать это кэширование более эффективной и в то же время помочь сервера:

  • В правиле, что «кэш cookie» действительна как минимум в 24 часов или некоторые другие сроки. Пока не истек файл cookie, Используйте снимок меню файла cookie и никогда не ударил сервера.

Ну..., вот и все, что приходит на ум прямо сейчас :). 

Если кто имеет какие-либо умные идеи здесь я бы хотел знать их.

И наконец – этот метод может использоваться для других вещей.  Этот клиент страница имеет ряд вещей с данными на различных страницах, Многие из них меняется относительно редко (как раз в неделю или раз в месяц).  Если вы имеете конкретные области функциональности, Вы можете дать более реагировать пользовательского интерфейса, потянув содержимое из хранилища локального файла cookie и рендеринга немедленно.  Он чувствует быстрее для пользователя, даже если вы не сохраняете сервере никаких циклов.  Вы можно Сохраните циклы сервера недействительным кэш локального файла cookie, решив на некоторых условий и триггеры.  Это все ситуационных и вычурные вещи и действительно самое веселое :). 

</конец>

undefinedПодписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

XSLT и jQuery образцов

Я делаю много XSLT и jQuery и думал, я хотел бы поделиться несколько фрагментов, которые другие могут оказаться полезными в будущем.

Пример 1: Выделяют простого JavaScript / jQuery в XSLT:

<XSL:шаблон матч = "что-то" XML:пространства = «preserve»>

  <!– Пустой из дружественных фильтры скрытое поле запроса –>
  <сценарий type = «текст/javascript»>
    $(документ).готов(функция(){
      $("#QueryFriendlyFilters").вал(«пустой»);
    });
  </сценарий>

</XSL:шаблон>

Что немного выделяет некоторые JavaScript, который ждет страницы для завершения загрузки (из-за $(документ).готов(…)) и затем задает значение скрытого поля QueryFriendlyFilters литеральное значение «пусто».

Пример 2: Использование <XSL:Если> проверить «больше чем»,  «меньше чем», и т.д..

<XSL:шаблон матч = "что-то" XML:пространства = «preserve»>

  <div id = «fdcAllFilters»>
 
    <XSL:Если test="@Count>0">
      <span class = «fdcFilterLabel»>Текущих фильтров:</диапазон>
    </XSL:Если>

    <!– больше материала происходит здесь. –>

</XSL:шаблон>

Выше фрагмент проверяет, является ли атрибут с именем «Подсчитать» элемента «что-то» больше нуля.  XML за это будет что-то вроде:”

<что-то Count = «5» />

Пример 3: Итерацию всех элементов, Interspersing jQuery звонков.

<!– Прохода через все фильтры и отображает правильный  ссылки. –>
<XSL:для каждого select = «UserFilter»>

  <класс = "FilterHref" href = "javascript:mySubmitPage(«RemoveUserFilter»,'{@ ID}’)">[X]</в>

  <span class = «fdcFilterLabel»><XSL:Стоимость от select="@FilterValue"/></диапазон>

  <сценарий type = «текст/javascript»>

    $(документ).готов(функция(){
        <XSL:текст><![CDATA[$("#QueryFriendlyFilters").вал( ($("#QueryFriendlyFilters").вал() + " ]]></XSL:текст>\"<XSL:Стоимость от select="@FilterValue"/>\"<XSL:текст><![CDATA["));]]></XSL:текст>
    });

  </сценарий>

</XSL:для каждого>

Выше фрагмент является наиболее сложным и может быть более простые способы это сделать.

XML за этим выглядит примерно следующим образом:

<UserFilter ID = «123» FilterValue = «xyzzy» />

Этот фрагмент итерации <UserFilter> узлы. 

Сначала он испускает якоря тегом, при щелчке вызывает функцию JavaScript, которая уже находится на странице, «mySubmitPage» и передает значение атрибута <UserFilter> узел с именем «ID». 

Он затем передает некоторые jQuery, который ожидает загрузки страницы.  Это jQuery обновляет скрытое поле с именем «QueryFriendlyFilters», добавив значение атрибута FilterValue.  Примечание все сумасшедшие <XSL:текст> и <![CDATA[ … ]]> прочее.

Вот это, надеюсь, это поможет!

</конец>

Подписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

Lists.asmx, GetListItems и папки

Я делаю некоторые исследования для кого-то сегодня вокруг list.asmx веб-службы в рамках SharePoint 2010 (и более ранних версий).  Она смогла получить элементы списка в корневой папке (включая имена подпапок), но не мог получить предметы в подпапки.  Я сделал некоторые смотрю на Интернет, и это удивительно общий вопрос.  Тем не менее, Я не мог получить хороший ответ на простой вопрос, «Если я знаю папки, как я могу получить элементы в папке?”  Чтобы быть честным, Я не попробовал все, что трудно, так как я хотел рис, это один из моей какое-то время Улыбка.

Чтобы задать этот вопрос, Я создал сайт под названием «Блогов сценариев» и собственный список с именем «Настраиваемого списка с вложенные папки».  Затем я создал папки с именем:

  • Год 2005
  • Год 2006
  • Год 2007

Я добавил несколько пунктов в папку «2006 год».  Это, как он выглядит:

image

Мой друг не писать код C#, но скорее с использованием Java, так что конверт SOAP был то, что она действительно необходима.  Чтобы получить, что, Я написал немного jQuery и затем используется для получения фактической HTTP разговора скрипача..

Вот соответствующие jQuery (Я скопировал код вниз ниже, если вы хотите копировать/вставить):

image

Они первый ключ должен включать как <queryOptions> и <QueryOptions> узел.  Второй ключ заключается в том, что <Папка> узел — это адрес URL, к которому клиент имеет доступ.

Могут быть и другие способы получить эту, но это работает хорошо для меня, когда с помощью jQuery.

Вот конверт SOAP для выше:

<soapenv:Конверт xmlns:soapenv =’HTTP://schemas.xmlsoap.org/SOAP/envelope/’>                
  <soapenv:Тело>
    <GetListItems xmlns =’
HTTP://schemas.Microsoft.com/SharePoint/SOAP/’>
      <listName>Настраиваемый список с вложенные папки</listName>
      <viewFields>  
        <ViewFields>
          <Имя FieldRef =' название’ />
          <Имя FieldRef ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Папка>
HTTP://demoserver1/блоги Сценарии/списки/настраиваемый список с Sub папки/год 2006</Папка>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Тело>
</soapenv:Конверт>

Много примеров и дискуссии вокруг этого привели меня к мнению, что все это мне нужно было <QueryOptions> и укажите имя папки.  Для меня, Нужно обоим подводить его внутрь <queryOptions> а также укажите полный URL-адрес для <Папка> узел.

Вот настройки AJAX jQuery:

$(документ).готов(функция() {
       var soapEnv =
           "<soapenv:Конверт xmlns:soapenv =’HTTP://schemas.xmlsoap.org/SOAP/envelope/’> \
               <soapenv:Тело> \
                    <GetListItems xmlns =’HTTP://schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listName>Настраиваемый список с вложенные папки</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <Имя FieldRef =' название’ /> \
                              <Имя FieldRef ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Папка>http://demoserver1/Blogging Сценарии/списки/настраиваемый список с Sub папки/год 2006</Папка> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Тело> \
           </soapenv:Конверт>";

</конец>

Подписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

Lists.asmx, GetList и "не может иметь значение null”

Я открыл сегодня что GetList() метод в lists.asmx веб-служба имеет очень тщательно вызываемый или он подвержен исключения таинственный «Не может иметь значение null» (и что это если вы можете получить последние еще хуже общее сообщение об ошибке, «Исключение типа ' Microsoft.SharePoint.SoapServer.SoapServerException’ была брошена.")  Специально, Я обнаружил, что не может представить какой-либо префикса по метод GetList.  В следующем фрагменте jQuery иллюстрирует точка:

image

Если вы сделаете это, веб-служба отвечает с «Не может иметь значение null» в соответствии с этой скрипач-предоставляет протокол HTTP:

<?Версия XML = "1.0" кодирование = «utf-8»?>
  <мыло:Конверт
     xmlns:мыло ="
HTTP://schemas.xmlsoap.org/SOAP/envelope/"    
     xmlns:xsi = "
HTTP://www.w3.org/2001/XMLSchema-instance
     xmlns:XSD ="
HTTP://www.w3.org/2001/XmlSchema">

  <мыло:Тело>
    <мыло:Ошибка>
      <faultcode>мыло:Сервера</faultcode>
      <faultstring>
        Исключение типа ' Microsoft.SharePoint.SoapServer.SoapServerException’ была брошена.
      </faultstring>
      <деталь>
        <ErrorString xmlns ="
HTTP://schemas.Microsoft.com/SharePoint/SOAP/">
Значение не может быть пустым.
        </ErrorString>
      </деталь>
    </мыло:Ошибка>
  </мыло:Тело>
</мыло:Конверт>

Конечно, Вы, вероятно, не будет содержать префиксом «s0» на ваших, Однако некоторые инструменты склонны делать это (как Eclipse).

Это тем более запутанным / сложно, потому что другие методы терпеть префиксы.  К примеру, в GetListCollection метод не против, если он имеет префикс, имена даже с абсурд как «xyzzy»:

image

Это «не может иметь значение null» кажется довольно часто с lists.asmx так надеюсь это поможет кто-то в будущем.

</конец>

Подписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

Бесконечно вложенности <Div> Теги и jQuery

Это кажется такой теме oddball, Я не уверен, что это действительно стоит блог о, но это никогда не остановили меня до, Поэтому здесь мы идем Улыбка

Я работаю над проектом, где я потянув некоторые данные из поиска, Упаковка его в XML-сообщения, а затем XML в конечном итоге превращается в HTML через XSLT.  Существует много jQuery, один бит из которых реализует некоторые tabbing функцию.  При нажатии на вкладку (действительно, в <Div>), jQuery вызывает .hide() и .show() на различных DIV (Начальная страница загрузки загружает все содержимое в этом случае нет никаких обратных передач).

Куча часов назад, закладке Коммутационная логика начал работать с ошибками, и он не будет показывать один из моих плат.  Я в конечном итоге отслеживать его вниз на тот факт, что internet explorer (по крайней мере) думал, что <Div> что вложенные теги, гораздо глубже, чем предназначены.Разработчик инструментов будет показывать:

-<div id = «Tab1Content»>
  -<Div>
    -<Div>
      -<div id = «Tab2Content»>
        -<Div>
           …………………………
                   </Div>  <— Наконец показывать его был закрыт весь путь вниз здесь!

Таким образом, Если я сделал $(«# Tab1Content»).скрыть(), Я также хотел бы скрыть Tab2, и я никогда не мог бы показать Tab2, если я не показал Tab1.  Я скопирован и вставлен код в visual studio и он показал все div накладки вверх красиво, так же, как они должны были делать, Глядя, как это:

-<div id = «Tab1Content»>
  +<Div>
  +<Div>
-<div id = «Tab2Content»>
  +<Div>
  +<Div>

Я избил моей головой о стену в то время как и заметил, что в фактических HTML код создает много пустых <Div> Теги, как:

<тело>

  <div id = «Tab1Content»>

    <div id = «row1» />
    <div id = «row2» />

  </Div>

  <div id = «Tab2Content»>

    <div id = «row1» />
    <div id = «row2» />

  </Div>

</тело>

(Приведенные выше является чрезмерно waaaaaaaaaaaay.  Пустая div теги являются полностью действительными. Некоторые из моих <Div> Теги были полны содержание, Однако многие другие не были.  Я пришел к реализации, моя <XSL:для каждого> директивы с короткой форме div метки когда xsl:для каждого не ' найти любые данные.  Я заставили комментарий HTML в выходной, как показано:

image

 

После того, как я сделал это, все div очереди, красиво и моя вкладка переключения начал работать.

Как всегда, Я надеюсь, что это помогает кто-то в крайнем случае.

</конец>

Подписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

Еще больше jQuery–Изменение размера изображения пример

Я унаследовал веб-часть от старого поставщика клиента и он имеет проблему размер изображений.  Изображения должны быть 60×50 но для некоторых странно причине, первоначальный поставщик заставили их в 42×42, Таким образом они выглядят сжато:

 

Хорошее изображение

Плохое изображение

Вот разметка (несколько упрощена):

<Таблица класса = «продлен outlook»>
  <thead>
    <TR>
      <th  Ширина ='100′>3 Вторник</th>
    </TR>
  </thead>

  <tbody>
    <TR класса = «прогноз»>
      <ТД width = "100′>
        <UL>
          <ли класса = «высокий»>Высокая: 72&град;F</ли>
          <ли класса = «низкая»>Низкая: 44&град;F</ли>
          <ли класса = «состояние»>Солнечный
            <img src =’
HTTP://deskwx.WeatherBug.com/Images/Forecast/icons/localized/60×50/EN/TRANS/cond007.PNG’ Ширина ='42’ Высота ='42’ ALT =” />
          </ли>
        </UL>
      </ТД>
    </TR>

  </tbody>

</Таблица>

Можно отметить, что хотя путь к изображению, сам показывает надлежащее измерение (60×50) первоначальный поставщик вынудил его в 42×42.  Почему?  Crazy.

В любом случае, Я хотел быстрого и простого решения этой проблемы, и я повернулся к jQuery.  Хитрость заключается в том, чтобы найти все соответствующие <IMG> Теги.  Я не хочу, чтобы сбросить карты с других тегов img (из которых есть много).  Этот бит jQuery сделал трюк:

<сценарий type = "текст/javascript" src ="HTTP://AJAX.googleapis.com/AJAX/libs/jQuery/1.5/jQuery.min.js"></сценарий>

<сценарий type = «текст/javascript»>
     $(документ).готов(функция () {

         $(' li.condition > IMG').Каждый(функция (индекс, пункт)
           
{
             $(пункт).CSS(«Ширина», «60»); 
             $(пункт).CSS(«Высота», «50»);
            });
     }); // при загрузке документа
</сценарий>

Что немного кода находит коллекции <ли> Теги, чей класс является «условие» и <IMG> дети.  Затем выполняется итерация всего этого.  Работал как Шарм.

Я мог бы вероятно рационализировать, но я никогда не был вида парень unix, решена π Кому 18 точность цифр с помощью sed и awk и я не такого рода, если jQuery парень, либо Улыбка.

</конец>

Подписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

Внедрение глобальной системы всплывающие уведомления

Я написал статью для www.SharePoint.Briefing.com под названием"Внедрение глобальной системы всплывающие уведомления.”  Эта функция была реализована для общинный колледж общаться закрытий школы за счет снега и так далее. 

Она использует настраиваемого списка, из коробки SharePoint веб-службы и некоторые jQuery для выполнения работы.

Вот дразнилку:

image

Читать все это здесь: http://www.sharepointbriefing.com/features/article.php/3918471/Implement-a-Global-Pop-up-Notification-System.htm

</конец>

Подписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin

Взять под контроль ваши OK и отмена кнопок

Я написал Эта статья некоторое время назад, но похоже я не связать его с моего блога в то время, так что здесь идет:

image

В этой статье описывается способ принудительного newform.aspx перенаправить на одну страницу, когда пользователь нажимает кнопку OK и другую страницу, когда она щелкает Отмена.

</конец>

Подписаться на мой блог.

Следуй за мной по щебетать на http://www.twitter.com/pagalvin