Месечни архиви: Ноември 2007

Мос ми кажува Мој колона името е резервирана или во употреба … Но тоа не е

Ажурирање 12/04/07: Види this Microsoft KB (http://support.microsoft.com/kb/923589) за информации поврзани со.

Всушност, што се испоставува дека е, но tricksy MOSS had to make it difficult.

My customer does some development work on his MOSS site over the weekend. It’s a bit of a jumble as to what he actually did, но крајниот резултат е ова:

  • He tries to add a site column called "Quantity" and MOSS replies: "The column name that you entered is already in use or reserved. Choose another name."
  • He attempts to add it to another environment and that works. Затоа, "Quantity" is not a reserved name.
  • He tries to find an existing site column named "Quantity" in that site collection. He cannot find it.

I did some research, and even some coding, waxed philosophical and finally found that a column named Quantity did, всушност, exist. It was in the "_Hidden" group. Hence, we could not find it via the SharePoint user interface.

How did it get there? I do not know, but I have a theory (or as my wife would call it, "blah blah blah"). Некаде по должината на линијата, на fabulous forty template was added and probably activated at a site in the site collection. It was then deactivated (or the site removed). The site column, сепак, remained but in the "_Hidden" group. If someone knows better, please let me know via e-mail or post in the comments.

SharePoint was telling the truth. It’s hardly worth pointing out that that message is not as helpful as it could be. It would be nice to see that message fork into two different messages in the future: 1) Say that the column name is reserved or it is not. 2) If it’s not reserved, show the site, or at least the group, where the column name is already used.

</крајот>

Присутни на податоци преку OM Прилагодено Листа (или, Уште еден OM податоци Displayor [како Yacc, но различни])

Денес, I spent a handful of hours tracking down the root cause behind the message "The column name that you entered is already in use or reserved. Choose another name."

Колоната во прашање може да се креира, брише и повторно креиран во друга средина, so I knew it wasn’t a reserved name. Сепак, Јас едноставно не можев да најдам на колоната насекаде преку стандардниот SharePoint кориснички интерфејс на било кој сајт во сајт за собирање.

Јас испратени до MSDN форуми тука и неукротим Ендрју Вудворд посочи мене во насока на основните објект модел на податоци.

Јас отиде да CodePlex да се најдат некои алатки кои ќе ми помогне пир во основните OM податоци и да ми помогне да се лоцира проблеми.

Се обидов неколку алатки и тие беа многу кул и интересен, но на крајот, the UI wasn’t good enough for my purpose. I’m not criticizing them by any means, но јасно ја алатката на одлуки немаат мојот проблем во умот кога тие создале нивните адаптери :). Most people seem to be investing a fair amount of time and effort in creating workstation / клиент апликации кои обезбедуваат дрво пати, right-click context menus and so forth. These are nice and all, но тоа е многу работа за да се создаде топ-of-the-линија корисник искуство кое исто така е многу флексибилен.

Јас навистина потребно одговор на овој проблем. Тоа се случи да ме дека ако би можел да ги добиете сите на сајтот колони во сајт за собирање во обичај листа, Јас би филтрирал, сортирање и создаде ставови дека ќе ми помогне да го најдете на оваа наводно постоечките колона (што тоа го правеше, BTW). I went ahead and did that and an hour or two later, ги имаше сите мојот сајт колони натоварена во обичај листа со групирање, sorting and so forth. I found my answer five minutes later.

Ако и кога јас успешно го преземе целиот свет, I think I will decree that all SharePoint tools providers must seriously consider surfacing their object model data in a custom list. That way, Имам моќ за да пребарувате било кој начин сакам (ограничени, се разбира, од стандардниот SharePoint карактеристики).

SharePoint Designer работното прилагодено акција — Набљудување За <Поле Тај дизајнер Тип =”StringBuilder” … />

Само еден брз забелешка дека има многу важна разлика меѓу овие две дефиниции:

<FieldBind Field="InParam1" DesignerType="StringBuilder" Id="2" Text="Input parameter #1"/>

наспроти:

<FieldBind Field="InParam1" Id="2" Text="Input parameter #1"/>

Првиот покажува како оваа во СПД:

сликата

додека вториот покажува како оваа:

сликата

I’m not sure how helpful these screen shots are but I put in the effort to make them so you have to view them 🙂

На опсервација е ова: StringBuilder ви овозможува да се изгради низа (очигледно) со мешање заедно низа literals и работното податоци (via the "Add Lookup" копчето во долниот лев агол). When you use the Add Lookup button, it inserts a token in the form "[%знак%]". When SharePoint invokes your custom action, (C # кодот во мојот случај), SharePoint поминува знак себе, not the value of the token. If you use the default designer type (вториот тип), SharePoint проширува знак и поминува реалната вредност на токен за вашата акција.

StringBuilder = лошо, стандардно дизајнер тип = ДОБРО.

Се разбира, that’s not what I really mean. Just don’t try and pass a parameter to your custom action when the designer type = StringBuilder. Use the default designer type and chain a StringBuilder to it up front if you need to build complex strings in your workflow (која патем е токму она што го прави за да се создаде една динамична предмет за е-мејл акција, но тоа е тема за друг блог запис, има).

<крај />

Предвремено Работното Активирање — А не-медицински решение

Ажурирање: Погледнете го овој MSDN дискусија, особено последниот запис: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. It describes a condition that may short circuit this whole thing. На кратко, тоа може да биде едноставно како правење на најмалку една од областите задолжителни.

Јас имам еден документ библиотека која поддржува осум типови содржини.

I have a SharePoint Designer workflow that wants to calculate and assign a "reminder date" со едноставно одземање 30 дена од друга колумна, "due date". This should only happen for one of the content types, "Insurance". The business objective is to produce a KPI that shows two categories of insurance documents: "about to expire" and "expired." (Можете да прочитате повеќе за овој вид на KPI и посуштински вежба-долу тука).

I have configured the workflow to fire when a new item is created and when an item is modified. The idea is that when an insurance document is uploaded, we calculate a "warning date" based on the expiration date. A pair of views work in connection with a KPI List to highlight these conditions when users hit their home page.

Оваа стратегија не работи кога јас испратите документот.

I upload the document and I am presented with the meta data entry screen. Во овој момент, I’m already in trouble. SharePoint has already, предвреме од моја перспектива, fired the workflow. I haven’t had a chance to pick the correct content type nor assign a due date. Во исто време, the workflow does not fire when I hit the submit button at this time. There’s some built-in logic that "believes" that first submit is part of the "create" event. Така … мојата работа е отпуштен и кога станува погубен, it was passed default meta data values.

The best work-around I know of is to insert a "pause until" activity in the workflow. I have the workflow pause for 1 minute. While it’s pausing, Јас го изберете точниот тип на содржина, enter the meta data and submit. The pause completes and the workflow proceeds as needed. (Имајте на ум дека во мојата средина, timer workflow activities from SPD do not work out of the box. You may have the same trouble. Види тука за повеќе детали).

I don’t like "magic delay" work-around. What happens if the user uploads a document and the phone rings and the ensuing conversation outlasts the pause? I can make the pause longer, но јас сè уште не ми се допаѓа.

Напишав за тоа на MSDN форуми тука: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1

SharePoint безбедност на основите Прв / Избегне севкупната стапици

Ажурирање 12/18/07: Види статија Пол Liebrand за некои технички последици на отстранување или менување на стандардната група имиња (види неговиот коментар подолу, како и).

Преглед:

SharePoint security is easy to configure and manage. Сепак, it has proven to be difficult for some first-time administrators to really wrap their hands around it. Not only that, I have seen some administrators come to a perfect understanding on Monday only to have lost it by Friday because they didn’t have to do any configuration in the intervening time. (Признавам да имаат овој проблем себе). This blog entry hopefully provides a useful SharePoint security primer and points towards some security configuration best practices.

Важна забелешка:

This description is based on out of the box SharePoint security. My personal experience is oriented around MOSS so there may be some MOSS specific stuff here, but I believe it’s accurate for WSS. I hope that anyone seeing any errors or omissions will point that out in comments or е-мејл мене. I’ll make corrections post haste.

Основи:

За целите на овој преглед, постојат четири основни аспекти на безбедноста: корисници / групи, securable објекти, дозвола нивоа и наследство.

Корисници и групи срушат да:

  • Индивидуалните корисници: Извлечени од Active Directory или креирана директно во SharePoint.
  • Групи: Mapped directly from active directory or created in SharePoint. Groups are a collection of users. Groups are global in a site collection. They are never "tied" до одредена securable објект.

Securable објекти се прекине најмалку:

  • Сајтови
  • Документ библиотеки
  • Поединечни ставки во листи и документ библиотеки
  • Папки
  • Различни ЦРБ подесувања.

Постојат други securable објекти, но ќе го добиете слика.

Дозвола нивоа: А пакет на зрнести / low level access rights that include such things as create/read/delete entries in lists.

Наследство: By default entities inherit security settings from their containing object. Sub-sites inherit permission from their parent. Document libraries inherit from their site. So on and so forth.

Корисници и групи се однесуваат на securable објекти преку дозвола нивоа и наследство.

Најважните безбедносните правила да се разбере, Ever 🙂 :

  1. Групи едноставно се колекционери на корисниците.
  2. Групи се глобални во рамките на сајт за собирање (i.e. не постои такво нешто како група дефинирана во еден сајт ниво).
  3. Името на групата не издржи, групи не, и за самите себе, have any particular level of security.
  4. Groups have security in the context of a specific securable object.
  5. Може да доделите различни нивоа на дозвола на истата група за секој securable објект.
  6. Веб апликација политики адут сите на овој (види подолу).

Безбедноста администратори изгубени во морето на групата и кориснички огласи секогаш може да се потпре на овие аксиоми да управуваат и да се разбере нивната безбедност конфигурација.

Севкупната стапици:

  • Група имиња лажно имплицира дозвола: Надвор од кутијата, SharePoint defines a set of groups whose names imply an inherent level of security. Consider the group "Contributor". One unfamiliar with SharePoint security may well look at that name and assume that any member of that group can "contribute" to any site/list/library in the portal. That may be true but not because the group’s name happens to be "contributor". This is only true out of the box because the group has been provided a permission level that enables them to add/edit/delete content at the root site. Through inheritance, the "contributors" group may also add/edit/delete content at every sub-site. One can "break" the inheritance chain and change the permission level of a sub-site such that members of the so-called "Contributor" група не може да придонесе во сите, но само читаат (на пример). This would not be a good idea, очигледно, бидејќи тоа ќе биде многу збунувачко.
  • Групи не се дефинирани на некој сајт ниво. It’s easy to be confused by the user interface. Microsoft provides a convenient link to user/group management via every site’s "People and Groups" линк. It’s easy to believe that when I’m at site "xyzzy" and I create a group through xyzzy’s People and Groups link that I’ve just created a group that only exists at xyzzy. That is not the case. I’ve actually created a group for the whole site collection.
  • Групи членство не се разликуваат од сајт (i.e. тоа е насекаде иста група се користи): Consider the group "Owner" и две локации, "HR" and "Logistics". It would be normal to think that two separate individuals would own those sites — an HR owner and a Logistics owner. The user interface makes it easy for a security administrator to mishandle this scenario. If I didn’t know better, Јас би можеле да пристапите на луѓе и групи линкови преку веб-сајтот човечки ресурси, select the "Owners" group and add my HR owner to that group. A month later, Logistics comes on line. I access People and Groups from the Logistics site, add pull up the "Owners" group. I see the HR owner there and remove her, thinking that I’m removing her from Owners at the Logistics site. Всушност, I’m removing her from the global Owners group. Hilarity ensues.
  • Неуспехот да се именува групи врз основа на специфичната улога: The "Approvers" group is a perfect example. What can members of this group approve? Where can they approve it? Do I really want people Logistics department to be able to approve HR documents? Of course not. Always name groups based on their role within the organization. This will reduce the risk that the group is assigned an inappropriate permission level for a particular securable object. Name groups based on their intended role. In the previous HR/Logistics scenario, Јас треба да имаат креирано две нови групи: "HR Owners" and "Logistics Owners" и доделите разумен дозвола нивоа за секој и на минималните износ што се бара за оние кои се на корисниците да се ја завршат својата работа.

Други Корисни Наводи:

Ако сте направиле тоа досега:

Please let me know your thoughts via the comments or email me. If you know other good references, Ве молиме да го стори истото!

Technorati Тагови:

Брз и лесен: Креирај податоци View Веб Дел (DVWP)

Постои богатство од голема информации за WSS 3.0 Податоци View Веб Дел (DVWP) on the web from several sources. Сепак, I found it to be surprisingly difficult to find information on this first very basic step. Here is another article in the "quick and easy" серија да го адреса.

Следете ги овие чекори за да создадете податоци видите веб дел (DVWP). They are based on an "Announcements" веб дел, но се однесуваат на повеќето листи.

  1. Создаде веб Соопштенија дел и да го додадете на некој сајт.
  2. Отворете го сајтот во SharePoint Designer.
  3. Отвори Default.aspx на сајтот.
  4. Select the Announcements web part and right-click.
  5. Од контекстното мени, select "Convert to XSНаT Data View".

SharePoint Designer Ве известува дека овој сајт е сега прилагодени од својот сајт дефиниција. Тоа не е нужно лоша, но постојат важни импликации (перформанси, надградба, други) which are beyond the scope of this little "Quick and Easy" влез. To get more information on this subject, Јас препорачувам и двете книги тука како и вашите омилени интернет пребарување.

Потврди дека сте го направив тоа правилно:

  1. Затвори и повторно да се отвори веб пребарувач (to avoid accidentally re-posting the original "add a new web part").
  2. Select the web part’s arrow drop-down and choose "Modify Shared Web Part" од менито.
  3. Алатката панел отвора кон десно.
  4. Панелот е променета од нејзиниот вообичаен сет опции на овој:
сликата

“Не може да се добие листа шема колона имотот од листата SharePoint” — опис / работа-arounds

Оваа недела, ние конечно репродуцирани проблем кој биле пријавени од страна на далечниот корисник: Кога таа се обиде да ги изнесете на содржината на листа да ексел, работите ќе чини да започнете со работа, но тогаш Excel ќе pop-up грешка: "Cannot get the list schema column property from the SharePoint list". She was running office 2003, windows XP and connecting to MOSS.

Барав на Internets и видов некои шпекулации, но ништо не 100% definitive. Hence, овој пост.

Проблемот: Извоз цел да ексел кој содржи датум (Датум = податочен тип на колоната).

Што работеше за нас: Convert the date to a "single line of text". Потоа, конвертирате назад кон датум.

That solved it. It was nice to see that the conversion worked, всушност. It was quite nervous that converting things this way would fail, but it did not.

Овој баг е фрлена огромна сенка врз датумот тип на податоци во умот на клиентот, па ние ќе треба да се бараат надвор дефинитивен одговор од Microsoft и се надевам дека јас ќе ја објавите и ажурирање тука во следниот краток период на време со своите официјален одговор и амбуланта корегирање информации.

Други референци:

http://www.kevincornwell.com/blog/index.php/cannot-get-the-list-schema-column-property-from-the-sharepoint-list/

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2383611&SiteID=1

<крајот>

Да се ​​претплатите на мојот блог.

Technorati Тагови: ,

Брзо и едноставно: Испрати е-маил со вградени хиперврска од SharePoint Designer работното

Еднаш или двапати месечно, некој мислења во форумот прашање: "How do I include hyperlinks to URL’s that are clickable from a SharePoint Designer email?"

Презентирани без дополнителни коментари: (добро, всушност таму е дополнително коментира по сликата):

сликата

Becky Isserman следи со корисен објаснување за тоа како да го вградите на линк до содржина во пораката: http://www.sharepointblogs.com/mosslover/archive/2007/11/20/addition-to-paul-galvin-s-post-about-sending-an-e-mail-with-hyperlinks-in-spd.aspx

Нова порака: SharePoint Designer работното домени (низа манипулација функции)

Ажурирање: Погледнете тука за моите мисли за комерцијализација на овој проект: http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!569.entry

Сум бил зафатен работат на мојот CodePlex проект кој е во моментов се фокусирани на обезбедување на низа манипулација екстензии за работни текови создадени преку SharePoint Designer.

Погледнете тука за повеќе детали:

Проектот дома: http://www.codeplex.com/spdwfextensions

Ослободување: https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=spdwfextensions&ReleaseId=8280

Верзија 1.0 вклучува следниве нови функции:

Функција Опис (Ако не е иста како и. Нето функција)
NUM-записи() Returns the number "entries" in a string as per a specified delimiter.

На пример: Num-entries in a string "a,б,в" with delimiter "," = 3.

Влез() Returns the nth token in a string as per a specified delimiter.
Должина String.Length
Замени() String.Replace()
Содржи() String.Contains()
Returns the word "true" or the word "false".
Подниза(започне) String.Substring(започне)
Подниза(започне,должина) String.Substring(започне,должина)
ToUpper() String.ToUpper()
ToLower() String.ToLower()
StartsWith() String.StartsWith()
Returns the word "true" or the word "false".
EndsWith() String.EndsWith()
Returns the word "true" or the word "false".

А ЦРБ траење грешка објасни

Јас предизвика ЦРБ грешка оваа недела дека се манифестира на кориснички интерфејс и во 12 кошница најавите за време на извршувањето.

Прва, ова се појави во корисничкиот интерфејс:

Не можев да најдам полиња за да вметнете сите идентификатор вредности правилно да се изврши SpecificFinder MethodInstance со Име … Обезбеди влезни параметри имаат TypeDescriptors поврзани со секоја идентификатор дефинирани за овој ентитет.

Тука е екранот:

clip_image001

Јас, исто така може да предизвика оваа порака да се појавуваат во 12 кошница најавите по волја (using my patented high-tech-don’t-try-this-at-home "mysterious errors" метод):

11/14/2007 09:24:41.27 w3wp.exe (0x080C) 0x0B8C SharePoint Portal Server Business Data 6q4x High Exception in BusinessDataWebPart.OnPreRender: System.InvalidOperationException: Идентификаторот вредност ”, од типот ”, е валиден. Expected Identifier value of Type ‘System.String’. на Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.FindSpecific(Објект[] subIdentifierValues, LobSystemInstance lobSystemInstance) на Microsoft.SharePoint.Portal.WebControls.BdcClientUtil.FindEntity(Лице лице, Објект[] userValues, LobSystemInstance lobSystemInstance) на Microsoft.SharePoint.Portal.WebControls.BusinessDataItemBuilder.GetEntityInstance(Види desiredView) на Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.GetEntityInstance() на Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.SetDataSourceProperties()

Барав наоколу и најде некои води во MSDN форумот, but they weren’t enough for me to understand what I was doing wrong. I watched a webcast by Тед Pattison дека мојот компанијата нема squirreled далеку на сервер и дојде да се реализира мојот проблем.

Во мојот ADF, Јас сум поврзување со SQL база на податоци како што е прикажано:

            <Сопственост Името="RdbCommandText" Тип="System.String">
              <![CDATA[
                Избери
                      , CARRIER_ID, EFFDT, Описот ќе се ко, EFF_STATUS, TAXPAYER_ID, NETWORK_ID, FRT_FORWARD_FLG, ALT_NAME1, ALT_NAME2, LANGUAGE_CD,
                      ЗЕМЈА, ADDRESS1, ADDRESS2, ADDRESS3, ADDRESS4, ГРАД, NUM1, NUM2, HOUSE_TYPE, ADDR_FIELD1, ADDR_FIELD2, ADDR_FIELD3,
                      COUNTY, На државата, ПОШТЕНСКИ, GEO_CODE, IN_CITY_LIMIT, COUNTRY_CODE, ТЕЛЕФОН, ПРОШИРУВАЊЕ, ФАКС, LAST_EXP_CHK_DTTM, FREIGHT_VENDOR,
                      INTERLINK_DLL, TMS_EXCLUDE_FLG
                 (nolock)
                КАДЕ
                  (LEAs <> "Сподели") и
                  (намали(CARRIER_ID) >= Пониска(@ MinID)) и
                  (намали(CARRIER_ID) <= Пониска(@ MaxId)) и
                  (намали(Описот ќе се ко) Како помал(@ InputDescr))
                ]]>
            </Сопственост>

Бев под услов SQL од Велика Британија лице и јас сум со оглед да се разбере дека тоа е специјални view they created just for me. The unique key there is CARRIER_ID.

Тука е бубачка јас воведе:

      <Идентификатори>
        <Идентификуваат Името="CARRIER_ID" TypeName="System.String" />
        <Идентификуваат Името="Описот ќе се ко" TypeName="System.String" /> 
</Идентификатори>

Некаде по должината на линијата, Јас успеал да си ја збуни текот на значењето на <Идентификатори> and added DESCR even though it’s not actually an identifier. I took DESCR out of the identifiers set and presto! Сето тоа работел.

I hope this saves someone some grief 🙂

Technorati Тагови: , , ,