Category Archives: jQuery і SharePoint

Подолати дратує проблема з відносним URL-адреси в SharePoint швидкого запуску

Я хотів би додати посилання на швидкий запуск навігації днями і SharePoint сказав мені:

image

Це чисто текстової версії що:

Переконайтеся, що URL є дійсним і починається з або неприпустимий символ (знак номера (#) або скісна риска (/)) Чи дійсні підтримуваних протоколів (Наприклад, ' http://’, ' https://’, ' файлу://’, ' ftp://’, ' mailto:’, ' Новини:’).

"Блех і віспа!"Я сказав:.

Обхідний шлях для цього є використання JavaScript, щоб знайти відомої посилання в швидкий запуск і змінити свою поведінку.

Щоб перевірити це, додати нові посилання на ваш сайт тест константи виглядає:

image

Я використовував jQuery. Щоб вирішити цю проблему, отримати деякі JavaScript і jQuery фігуру на сторінку, використовуючи ваш улюблений техніки і лінія з таким кодом:

 

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

    $("на:містить(Випробувань URL заміна)").натисніть кнопку(функція () { оповіщення("змінені натисніть поведінка!"); повернення ХИБНІСТЬ;});

});

Боб, а твій дядько.

JQuery селектор знаходить кожен <на> тег, який має "Тест URL заміна" в його назві. Ви можете знайти, налаштувати, залежно від вашого посилання і такі.

На .click(функція() скасовує будь-який інший SharePoint зробив би, якщо користувач натиснув. Переконайтеся, що ви "повернутися помилковим", інакше це зробити ваш матеріал а потім спробувати href річ занадто, який майже напевно не є ваша мета.

Це було зроблено і випробування в онлайн-середовищі SharePoint, але повинні добре працювати в 2010 а раніше теж.

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

Швидкий і простий: Вирішити "неприпустиму URL-адресу параметра” проблема з UpdateListItems в lists.asmx

Під час роботи з UpdateListItems через lists.asmx, легко генерувати помилки:

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

Надана URL-адреса містить неприпустимі команди або значення. Будь ласка, перевірте URL знову.

Ця помилка може статись, коли ви забули включити код у у списку полів для оновлення.  Це, як багато з цих SP веб-служб, Це трохи контрінтуітівним, оскільки вам необхідно включити Ідентифікатор атрибута ID на <Метод> елемент.  І ви не оновлюється ID і мабуть, ніколи не хочете, щоб в першу чергу.

Ця мила конверт робіт:

<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">заблокований!</Поле>
            <Поле ім'я ="ІДЕНТИФІКАТОР">1</Поле>
          </Метод>
        </Пакетний>                     
        </оновлення>                
      </UpdateListItems>             
  </soapenv:Тіло>         
</soapenv:Конверт>

Якщо ви смуги на посилання на поле ID то ви отримаєте дратівливі повідомлення "Неправильний URL параметр".

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

 

Бідна людина в кешування в JavaScript

[TL;DR версії: використовує кукі для зберігання результатів async дзвінків; візуалізації результатів останніх async дзвінків негайно а потім підтвердити їх після завантаження сторінки.]

Я працюю на intranet-сайті SharePoint для клієнта цієї функції, серед іншого, стилізований другорядного меню, чиї параметри меню керування через регулярні старі настроюваним списком.  Ідея полягає в тому, що клієнт одержує управління меню "своїх" сайт без зачіпають або під впливом глобальної навігації, згасити його.

(Існує щось неймовірно підривних про додавання CEWP, що вказує на файл HTML, який завантажує деякі CSS і JS докорінно змінити характер майже все про поведінку сайту..., але це на іншій посаді)

Код для цього дуже проста:

  • Чекати сторінку для завантаження і зробити async, зателефонуйте завантажувати до пунктів меню зі списку за допомогою відпочинку або lists.asmx або будь-який інший
  • Використання jQuery, динамічно заповнення букет, якщо <Лі>у всередині батьків <ul> (у Піндер християнський статті тут спрощене пояснення цього tecnnique)
  • Робити все форматування за допомогою CSS
  • Прибуток!

Хворе місце тут в тому, що кожного разу, коли хтось потрапляє одним із сторінки сайту, Цей користувач веб-браузер простягає руку отримати елементи зі списку.  Після того, як dev є повним і тестування довела речей, щоб бути стабільною і повний, цей заклик не є необхідним більше, ніж 99% часу, оскільки у меню рідко змінюється.  До нього дивні афекту користувальницький інтерфейс, який є спільним в цьому прекрасному новому світі гіпер ajaxy веб-сайтів-сторінка надає, і тільки потім меню візуалізації.  Це нервовий і відволікає, на мій погляд.  І нервовий. Так, кешування. 

Я змінив логіка константи виглядає:

  • Знайдіть файл cookie у веб-переглядачі, що містить меню, як я останній раз читав його
    • Якщо знайдено, зробити його негайно.  Чи не чекайте, сторінки завантаження.  (Ви повинні переконатися, що ваш HTML стратегічно розташованих тут, але це не важко зробити).
  • Чекати сторінку для завантаження і зробити async, зателефонуйте завантажувати до пунктів меню зі списку за допомогою відпочинку або lists.asmx або будь-який інший
  • Порівняти те, що я отримав від печива
    • Якщо він відповідає, Зупинити
    • В іншому випадку, використання jQuery, динамічно заповнення букет, якщо <Лі>в у в <ul>
  • Робити все форматування за допомогою CSS
  • Прибуток!

Деякі з ви збираєтеся сказати, "Ей! немає не реальних кешування тут відбувається так, як ви читаєте меню все одно кожен раз, коли.”  І ви маєте рацію-я не даю сервер будь-якого роду перерву.  Але тому що дзвінок async і відбувається після того, як сторінку від початкового Деструктивна HTML повністю надає, вона відчуває "себе" більш гнучкою для користувача.  Меню надає досить стільки, скільки сторінку малює.  Якщо меню відбувається до зміни, користувач піддається нервовий повторно перемальовувати меню, але що один раз.

Є кілька шляхів, щоб зробити цей кешування більш ефективним і допомогти на сервері в той же час:

  • Покласти в правило "куки кеш" дійсна протягом мінімум 24 годин або деякі інші терміни. Оскільки немає жоден файл cookie не прострочений, за допомогою файлу cookie, меню знімок і ніколи не потрапляють на сервері.

Добре..., що все, що спадає на думку прямо зараз :). 

Якщо хто має будь-які розумні ідеї тут я б із задоволенням їх знаємо.

І нарешті-ця техніка може бути використана для інших речей.  Цей клієнт сторінка має ряд динамічної речей на різних сторінках, багато хто з них відносно рідко змінюється (як раз на тиждень або раз на місяць).  Якщо ви націлюєте конкретних областях функціональності, можна надати більш гнучкою для користувача Інтерфейсу, потягнувши змісту з магазину місцевих печива й наданням негайно.  Вона відчуває себе швидше користувачеві навіть, якщо ви не записуєте сервер будь-якої циклів.  Ви можна зберегти сервер циклів, ухвалення рішення про деякі умовах і тригерів спростовувати кеш локальних файлів cookie.  Це все ситуаційні і претензійною речі і дійсно найвеселіше :). 

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

XSLT і jQuery зразки

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

Приклад 1: Виділяють простий JavaScript / jQuery в XSLT:

<перетворення XSL:Шаблон матч = "щось" XML:простір = "Зберегти">

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

</перетворення XSL:Шаблон>

Що біт випромінює JavaScript, що чекає на сторінці, щоб процес завантаження (з-за $(документ).готові(…)) і потім набори значення приховані поля названа QueryFriendlyFilters буквальне значення "порожній".

Приклад 2: Використання <перетворення XSL:Якщо> Щоб перевірити «більше за»,  "менше", д.

<перетворення XSL:Шаблон матч = "щось" XML:простір = "Зберегти">

  <DIV id = "fdcAllFilters">
 
    <перетворення XSL:Якщо test="@Count>0">
      <охоплюють клас = "fdcFilterLabel">Поточних фільтрів:</Тривалість>
    </перетворення XSL:Якщо>

    <!– більше речей відбувається тут. –>

</перетворення XSL:Шаблон>

Вище фрагмент перевіряє, щоб побачити, якщо атрибут, названий "Count", "щось" елемента, більше нуля.  XML за це буде щось на зразок:”

<те, що кількість = "5" />

Приклад 3: Перебору всіх елементів, пересипаючи jQuery дзвінки.

<!– Перебору всі фільтри та відобразити правильний  посилання. –>
<перетворення XSL:для кожного виділення = "UserFilter">

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

  <охоплюють клас = "fdcFilterLabel"><перетворення XSL:значення з select="@FilterValue"/></Тривалість>

  <скрипт тип = "текст/javascript">

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

  </сценарій>

</перетворення XSL:для кожного>

Вище фрагмент є найбільш складним і може бути простіше способу зробити це.

XML за це виглядає приблизно так:

<UserFilter ID = "123" FilterValue = "xyzzy" />

Цей фрагмент ітерації через <UserFilter> вузли. 

Він вперше випромінює прив'язку тег, що при натисканні викликає JavaScript функції, що вже на сторінці, "mySubmitPage" і проходить значення атрибута на <UserFilter> вузлом ім'я «Ідентифікатор». 

Потім він випромінює jQuery, що чекає на сторінку для завантаження.  Що jQuery оновлення прихованим поле з ім'ям "QueryFriendlyFilters" за допомогою додавання значення атрибута FilterValue.  Примітка всі божевільні <перетворення XSL:текст> і <![CDATA[ … ]]> речі.

Все, сподіваюся, це допоможе!

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

Lists.asmx, GetListItems і папок

Я роблю деякі дослідження для кого-то сьогодні навколо list.asmx веб-служби, що надається як частина SharePoint 2010 (і раніше).  Вона була в змозі отримати елементи в кореневій папці (включаючи імена вкладені папки), але не міг отримати елементи в вкладені папки.  Я зробив деякий озираючись на Інтернет, і це дивно поширені питання.  Ще, Я не міг отримати хорошу відповідь просте запитання:, "Якщо я знаю, що папки, як отримати елементи в папці?”  Щоб бути чесним, Я не спробувати все, що важко, тому що я хотів фігурою, це одне з на моїх на деякий час посмішка.

Щоб реалізувати цю можливість, Я створив сайт, названий "Блогів сценарії" та настроюваний список, названий "Настроюваний список із вкладених папок".  Потім я створив папок, названий:

  • Рік 2005
  • Рік 2006
  • Рік 2007

Я додав кілька елементів до папки "2006 року".  Це те, що він виглядає:

image

Мій друг не писати C# код, але швидше за використання Java, так МИЛО конверт було те, що вона дійсно необхідна.  Щоб отримати, що, Я написав трохи jQuery і потім використовувати скрипаля отримати фактичне розмова HTTP.

Ось відповідних jQuery (Я скопіювати код вниз нижче, якщо ви хочете копіювати/вставити):

image

Вони є першим ключовим включити обидві на <queryOptions> і <QueryOptions> вузол.  Другим ключовим є те, що на <Папка> вузол є URL-адресу, на яку клієнт має доступ.

Можливо, інші способи, щоб отримати це, але це працює добре для мене, коли за допомогою jQuery.

Ось МИЛО конверт для зазначених вище:

<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/блоги Сценарії, списки, настроюваний список з південь папках на рік 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 Сценарії, списки, настроюваний список з південь папках на рік 2006</Папка> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Тіло> \
           </soapenv:Конверт>";

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

Lists.asmx, GetList і "значення не може бути null”

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

image

У цьому випадку, веб-служба реагує з "Значення не може бути пусте" відповідно до цього Скрипаль-надані 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" на свій розсуд, але деякі інструменти, схильні до зробити це (як затемнення).

Це все більш заплутаним / розчарування, оскільки інші методи терпіти префіксів.  Наприклад, на GetListCollection метод не проти, якщо вона є префіксом, навіть з префікса дурниця, як "xyzzy":

image

Це "значення не може бути невизначеним" здається досить часто, з lists.asmx, так що сподіваюся, це допоможе хтось на в майбутньому.

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

Нескінченно вкладення <DIV> Теги і jQuery

Це схоже такого дивак тему, Я не впевнений, що це дійсно коштує в блозі про, але це ніколи не зупиняло мене перед, так що тут ми йдемо посмішка

Я працюю проект, де я потягнувши деякі дані від пошуку, упаковки його в XML-повідомлення а потім що XML в кінцевому рахунку перетворюється в HTML за допомогою XSLT.  Існує багато jQuery участь, один біт, який реалізує деякі табуляції функціональність.  При натисканні на вкладці (Справді, на <DIV>), jQuery викликає .hide() і .show() різні Діви (первинного завантаження сторінки завантажує всі вміст, щоб там не без зворотної передачі при цьому).

Купу години тому, вкладці перемикання логіка почав працювати з помилками, і він не буде показувати один з моїх вкладки.  Я в кінцевому підсумку відслідковуються його аж до того, що 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 вишикувалися красиво і мій вкладку перемикання почав працювати.

Як завжди, Я сподіваюся, що це допоможе кому-то в крайньому випадку.

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

Ще більше jQuery–Змінити розмір зображення-приклад

Я успадкувала веб-частину від клієнта старого продавця, і він став проблемою іміджу розмір.  Зображення повинні бути 60×50 але для деякого непарного причини, оригінальний постачальника змусила їх в 42×42, так, щоб вони стисло:

 

Гарне зображення

Поганий імідж

Ось розмітки (дещо спрощене письмо):

<Таблиця клас = 'extended outlook'>
  <thead>
    <TR>
      <го  Ширина ='100′>3 Вівторок</го>
    </TR>
  </thead>

  <tbody>
    <TR-клас = 'прогнози'>
      <TD ширина ='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>
      </TD>
    </TR>

  </tbody>

</Таблиця>

Ви помітите, що навіть незважаючи на шлях до самого зображення показує належного вимір (60×50) оригінальний постачальника змусив його в 42×42.  Чому?  Божевільний.

У всякому разі, Я хотів швидко і легко вирішення цього питання, і я звернувся до jQuery.  Трюк був знайти всі відповідні <IMG> Мітки.  Я не хочу, щоб гидоту будь-які інші теги img (яких є багато).  Це трохи jQuery зробили свою справу:

<скрипт тип = текст/javascript"" src ="http://Ajax.googleapis.com/AJAX/libs/Jquery/1.5/JQuery.min.js"></сценарій>

<скрипт тип = "текст/javascript">
     $(документ).готові(функція () {

         $(' li.condition > IMG').Кожен(функція (індекс, елемент)
           
{
             $(елемент).CSS("ширина", "60"); 
             $(елемент).CSS("Висота", "50");
            });
     }); // завантаження документа
</сценарій>

Що біт код знаходить колекції <Лі> Мітки, чиї клас є "стан" і <IMG> дітей.  Потім він спроектувала через все це.  Працював як шарм.

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

</кінець>

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

Йди за мною на Twitter в 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

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin

Взяти під контроль ваш ОК і кнопки скасувати

Я написав у цій статті деякий час назад, але схоже, що я не посилання на нього з мого блогу в той час, Ось іде:

image

Ця стаття описує як змусити newform.aspx переспрямування до однієї сторінки, коли користувач натискає ОК і іншої сторінки, коли вона натискає кнопку "Скасувати".

</кінець>

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

Йди за мною на Twitter в http://www.twitter.com/pagalvin