maandelikse Argiewe: November 2007

MOSS Vertel my My kolom naam gereserveer of in gebruik … Maar dit is nie

UPDATE 12/04/07: Sien this Microsoft KB (http://support.microsoft.com/kb/923589) verwante inligting.

Eintlik, dit blyk dat dit is, maar 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, maar die eindresultaat is dit:

  • 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. Daarom, "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, in werklikheid, 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"). Iewers langs die lyn, 1 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, egter, remained but in the "_Hidden" group. If someone knows better, please let me know via e-pos 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.

</einde>

OM huidige data via 'n persoonlike lys (of, Nog 'n OM Data Displayor [soos YACC, maar verskillende])

Vandag, 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."

Die kolom in die vraag kan geskep word, verwyder en weer geskep in 'n ander omgewing, so I knew it wasn’t a reserved name. Egter, I simply couldn’t find the column anywhere via the standard SharePoint user interface at any site in the site collection.

I posted to MSDN forums here and the indomitable Andrew Woodward pointed me in the direction of the underlying object model data.

I went off to codeplex to find some tools that would help me peer into the underlying OM data and help me locate the trouble.

I tried several tools and they were very cool and interesting but in the end, the UI wasn’t good enough for my purpose. I’m not criticizing them by any means, but clearly the tool-makers didn’t have my problem in mind when they created their UI :). Most people seem to be investing a fair amount of time and effort in creating workstation / client applications that provide tree views, right-click context menus and so forth. These are nice and all, but it’s a lot of work to create a top-of-the-line user experience that is also very flexible.

I really needed an answer to this problem. It occurred to me that if I could get all of the site columns in the site collection into a custom list, I could filter, sort and create views that would help me find this supposedly existing column (which it did, BTW). I went ahead and did that and an hour or two later, had all my site columns loaded into a custom list with grouping, sorting and so forth. I found my answer five minutes later.

If and when I successfully take over the world, I think I will decree that all SharePoint tools providers must seriously consider surfacing their object model data in a custom list. That way, I have the power to search any way I want (constrained, natuurlik, by standard sharepoint features).

Die SharePoint Ontwerper Workflow Custom Aksie — Opmerking oor <Veld Tie Designer type =”StringBuilder” … />

Net 'n vinnige waarneming dat daar 'n baie belangrike verskil tussen hierdie twee definisies:

<FieldBind Veld = "InParam1" Designer Tipe = "String Builder" ID = "2" Text = "invoer parameter # 1" />

teenoor:

<FieldBind Veld = "InParam1" ID = "2" Text = "invoer parameter # 1" />

Die eerste programme soos dit in SPD:

beeld

terwyl die laasgenoemde soos hierdie toon:

beeld

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 🙂

Die waarneming is dit: StringBuilder kan jy 'n tou te bou (natuurlik) deur die meng die string vasgekodeerde en workflow data (via the "Add Lookup" knoppie in die linkerkantse hoek). When you use the Add Lookup button, it inserts a token in the form "[%teken%]". When SharePoint invokes your custom action, (C # kode in my geval), SharePoint gaan die teken self, not the value of the token. If you use the default designer type (Die tweede soort), SharePoint brei uit die teken en die werklike waarde van die teken te bowe gaan aan jou optrede.

StringBuilder = BAD, standaard ontwerper tipe = GOEIE.

Natuurlik, 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 (wat toevallig presies wat 'n mens 'n dinamiese onderwerp te skep vir die e-pos aksie, maar dit is 'n onderwerp vir 'n ander blog inskrywing, is).

<einde />

Premature Workflow Aktivering — 'N nie-mediese oplossing

UPDATE: Sien hierdie MSDN bespreking, veral die laaste inskrywing: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. It describes a condition that may short circuit this whole thing. In kort, Dit kan so eenvoudig wees as om ten minste een van die velde verpligte.

Ek het 'n dokument biblioteek wat ondersteun agt inhoud tipes.

I have a SharePoint Designer workflow that wants to calculate and assign a "reminder date" deur eenvoudig te trek 30 dae vanaf 'n ander kolom, "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." (Jy kan meer lees oor hierdie soort van KPI en meer aansienlike boor-down hier).

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.

Hierdie strategie werk nie wanneer ek laai 'n dokument.

I upload the document and I am presented with the meta data entry screen. Op hierdie punt, I’m already in trouble. SharePoint has already, voortydig uit my perspektief, fired the workflow. I haven’t had a chance to pick the correct content type nor assign a due date. Op dieselfde tyd, 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. So … my workflow het gevuur en wanneer dit uitgevoer, 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, Ek kies die korrekte inhoud tipe, enter the meta data and submit. The pause completes and the workflow proceeds as needed. (Let daarop dat in my omgewing, timer workflow activities from SPD do not work out of the box. You may have the same trouble. Sien hier vir meer besonderhede).

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, maar ek het nog nie daarvan hou nie.

Ek het geskryf oor hierdie op die MSDN forums hier: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1

. SharePoint Sekuriteit Grondbeginsels Primer / Vermy algemeen slaggate

UPDATE 12/18/07: Sien Paul Liebrand se artikel vir 'n paar tegniese gevolge van die verwydering of die wysiging van die standaard vormveranderings (sien sy kommentaar hieronder asook).

Oorsig:

SharePoint security is easy to configure and manage. Egter, 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. (Ek erken dat hierdie probleem myself). This blog entry hopefully provides a useful SharePoint security primer and points towards some security configuration best practices.

Belangrike nota:

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 email my. I’ll make corrections post haste.

Grondbeginsels:

Vir die doel van hierdie oorsig, Daar is vier fundamentele aspekte van sekuriteit: gebruikers / groepe, beveilig baar voorwerpe, toestemming vlakke en erfenis.

Gebruikers en Groepe breek te:

  • Individuele gebruikers: Getrek uit die aktiewe gids of wat direk in SharePoint.
  • Groepe: 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" aan 'n spesifieke beveilig baar voorwerp.

Beveilig baar voorwerpe breek aan ten minste:

  • Webwerwe
  • Dokument biblioteke
  • Individuele items in lyste en dokument biblioteke
  • Dopgehou
  • Verskeie BDC instellings.

Daar beveilig baar ander voorwerpe, maar jy kry die prentjie.

Toestemming vlakke: 'N bondel van korrel / low level access rights that include such things as create/read/delete entries in lists.

Erfenis: 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.

Gebruikers en groepe in verband te beveilig baar voorwerpe via toestemming vlakke en erfenis.

Die meeste Belangrike Security Reëls om te verstaan, Ever 🙂 :

  1. Groepe is net versamelings van gebruikers.
  2. Groepe is globale binne 'n webwerf versameling (d.w.z. daar is geen sodanige ding as 'n groep gedefinieer op 'n terrein vlak).
  3. Groep naam nieteenstaande, groepe nie, in en van die self, have any particular level of security.
  4. Groups have security in the context of a specific securable object.
  5. Jy kan toewys verskillende toestemming vlakke aan dieselfde groep vir elke beveilig baar voorwerp.
  6. Web aansoek beleid troef al hierdie (sien hieronder).

Security administrateurs verloor in 'n see van 'n groep en gebruikers lys kan altyd staatmaak op hierdie aksiomas te bestuur en te verstaan ​​hul sekuriteit opset.

Algemene slaggate:

  • Group name valslik impliseer toestemming: Uit die boks, 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" groep kan glad nie bydra, maar slegs gelees (byvoorbeeld). This would not be a good idea, natuurlik, want dit sou baie verwarrend.
  • Groepe word nie gedefinieer op 'n terrein vlak. 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" skakel. 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.
  • Groepe lidmaatskap nie afhanklik van die webwerf (d.w.z. dit is oral dieselfde van die groep word gebruik): Consider the group "Owner" en twee terreine, "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, Ek kan toegang tot die mense en groepe skakels via die HR webwerf, 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. In werklikheid, I’m removing her from the global Owners group. Hilarity ensues.
  • Versuim om groepe op grond van spesifieke rol te noem: 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, Ek moet geskep het twee nuwe groepe: "HR Owners" and "Logistics Owners" en wys sinvolle toestemming vlakke vir elk en die minimum bedrag wat nodig is vir die gebruikers hul werk te doen.

Ander nuttige inligting:

As jy dit so ver:

Please let me know your thoughts via the comments or email me. If you know other good references, asseblief nie dieselfde!

Technorati Tags:

Vinnige en maklike: Skep 'n Data View Web Deel (DVWP)

Daar is 'n rykdom van baie inligting op die WSS 3.0 Data View Web Deel (DVWP) on the web from several sources. Egter, 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" reeks dit aan te spreek.

Volg hierdie stappe om 'n data vertoning web deel te skep (DVWP). They are based on an "Announcements" web deel, maar van toepassing op die meeste lyste.

  1. Skep 'n Announcements web deel en voeg dit by 'n webwerf.
  2. Maak die webwerf in SharePoint Designer.
  3. Maak die site se default.aspx.
  4. Select the Announcements web part and right-click.
  5. Uit die konteks kieslys, kies "Skakel na XSDieT Data View ".

SharePoint Designer in kennis stel dat hierdie webwerf is nou op maat van die werf definisie. Dit is nie noodwendig sleg nie, maar daar is 'n belangrike implikasies (prestasie, gradeer, ander) wat is buite die bestek van hierdie klein "Vinnig en maklik" inskrywing. To get more information on this subject, Ek beveel beide boeke hier sowel as jou gunsteling internet soek.

Bevestig dat jy het dit reg:

  1. Sluit en heropen die webblaaier (per ongeluk vermy weer plaas die oorspronklike "voeg 'n nuwe web deel").
  2. Kies die web deel arrow drop-down en kies "Verander Gedeelde Web Deel" van die spyskaart.
  3. Die instrument paneel maak aan die regterkant.
  4. Die paneel het verander van sy gewone opsies aan hierdie:
beeld

“Kan nie die lys skedule kolom eiendom van die SharePoint lys” — beskrywing / werk-arounds

Hierdie week, ons uiteindelik 'n probleem wat deur 'n afgeleë gebruiker aangemeld is gereproduseer: Toe sy probeer om die inhoud van 'n lys uit te voer om te presteer, dinge sal lyk om te begin werk, maar dan Excel sal pop-up 'n fout: "Cannot get the list schema column property from the SharePoint list". She was running office 2003, windows XP and connecting to MOSS.

Ek het die Inter en bietjie spekulasie, maar niks gesien 100% definitive. Hence, hierdie pos.

Die probleem: Uitvoer van 'n oog om te presteer met 'n datum (datum = die datatipe van die kolom).

Wat vir ons gewerk het: Convert the date to a "single line of text". Toe, skakel dit terug na 'n datum.

That solved it. It was nice to see that the conversion worked, eintlik. It was quite nervous that converting things this way would fail, but it did not.

Hierdie fout het gegooi 'n groot skaduwee oor die datum datatipe in die kliënt se gedagtes, so ons gaan soek na 'n definitiewe antwoord van Microsoft en hopelik sal ek pos en werk hier in die volgende kort periode van tyd saam met hul amptelike antwoord en hotfix inligting.

Ander verwysings:

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

<einde>

Skryf in op my blog.

Technorati Tags: ,

Vinnige en maklike: Stuur 'n e-pos met ingeboude hyperlink van SharePoint Designer workflow

Een of twee keer per maand, iemand poste 'n forum vraag: "Hoe kan ek skakels na URL's wat klikbare van 'n SharePoint Designer e-pos?"

Aangebied sonder enige verdere kommentaar: (goed, daar eintlik verder kommentaar lewer na die beeld):

beeld

Becky Isserman volg met 'n nuttige verduideliking oor hoe om 'n skakel na 'n item in te sluit in die e-pos: 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

Nuwe vrystelling: SharePoint Designer Workflow Uitbreidings (stringmanipulasie funksies)

UPDATE: Kyk hier my gedagtes oor die kommersialisering van hierdie projek: http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!569.entry

Ek is besig om op van my Codeplex projek wat tans gefokus op die verskaffing van stringmanipulasie uitbreidings aan werkstromen via SharePoint Designer.

Kyk hier vir meer inligting:

Projek huis: http://www.codeplex.com/spdwfextensions

Release: https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=spdwfextensions&ReleaseId=8280

Weergawe 1.0 sluit die volgende nuwe funksies:

Funksie Description (indien nie dieselfde as Netto funksie)
Num-inskrywings() Retour volgens die aantal inskrywings" in a string as per a specified delimiter.

Byvoorbeeld: Num-entries in a string "a,b,c" with delimiter "," = 3.

Entry() Returns the nth token in a string as per a specified delimiter.
Lengte String.Length
Vervang() String.Replace()
Bevat() String.Contains()
Returns the word "true" or the word "false".
Substring(begin) String.Substring(begin)
Substring(begin,lengte) String.Substring(begin,lengte)
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".

'N BDC looptyd fout verduidelik

Ek laat 'n BDC fout hierdie week wat gemanifesteer op die gebruikerskoppelvlak en in die 12 Hive log tydens looptyd.

Eerste, Dit verskyn in die gebruikerskoppelvlak:

Kon dit nie vind velde al die Identifier waardes te voeg om korrek uit te voer 'n SpecificFinder MethodInstance met Naam … Maak seker invoerparameters het TypeDescriptors wat verband hou met elke Identifier gedefinieer vir hierdie Entiteit.

Hier is 'n skerm prent:

clip_image001

Ek kan ook veroorsaak dat hierdie boodskap verskyn in die 12 die korf log by sal (using my patented high-tech-don’t-try-this-at-home "Geheimsinnige foute" metode):

11/14/2007 09:24:41.27 w3wp.exe (0x080C) 0x0B8C SharePoint Portal Server Business Data 6q4x High Exception in BusinessDataWebPart.OnPreRender: System.InvalidOperationException: Die identifiseerder waarde ”, van die tipe ”, is, is ongeldig. Expected Identifier value of Type ‘System.String’. by Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.FindSpecific(Object[] subIdentifierValues, LobSystemInstance lobSystemInstance) by Microsoft.SharePoint.Portal.WebControls.BdcClientUtil.FindEntity(Entiteit entiteit, Object[] userValues, LobSystemInstance lobSystemInstance) by Microsoft.SharePoint.Portal.WebControls.BusinessDataItemBuilder.GetEntityInstance(View desiredView) by Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.GetEntityInstance() by Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.SetDataSourceProperties()

Ek het rond gesoek en het 'n paar leidrade in die MSDN forum, but they weren’t enough for me to understand what I was doing wrong. I watched a webcast by Ted Pattison dat my maatskappy squirreled weg op 'n bediener en het my probleem om te besef.

In my ADF, Ek is verbind tot 'n SQL databasis soos aangedui:

            <Eiendom Naam="RdbCommandText" Tipe="System.String">
              <![CDATA[
                KIES
                      , CARRIER_ID, EFFDT, Ses, EFF_STATUS, TAXPAYER_ID, NETWORK_ID, FRT_FORWARD_FLG, ALT_NAME1, ALT_NAME2, LANGUAGE_CD,
                      COUNTRY, Adres1, Adres2, ADDRESS3, ADDRESS4, STAD, Num1, Num2, HOUSE_TYPE, ADDR_FIELD1, ADDR_FIELD2, ADDR_FIELD3,
                      COUNTY, STAAT, POS, GEO_CODE, IN_CITY_LIMIT, COUNTRY_CODE, PHONE, UITBREIDING, FAKS, LAST_EXP_CHK_DTTM, FREIGHT_VENDOR,
                      INTERLINK_DLL, TMS_EXCLUDE_FLG
                 (nolock)
                WAAR
                  (SETID <> 'Aandeel') en
                  (verlaag(CARRIER_ID) >= Laer(@ MinID)) en
                  (verlaag(CARRIER_ID) <= Laer(@ MaxId)) en
                  (verlaag(Ses) SOOS laer(@ InputDescr))
                ]]>
            </Eiendom>

Ek is met dien verstande dat SQL van 'n DBA persoon en ek gegee om te verstaan ​​dat dit 'n spesiale view they created just for me. The unique key there is CARRIER_ID.

Hier is die fout wat ek lei:

      <Merktekens>
        <Identifiseer Naam="CARRIER_ID" Type Name="System.String" />
        <Identifiseer Naam="Ses" Type Name="System.String" /> 
</Merktekens>

Iewers langs die lyn, Ek het daarin geslaag om myself te verwar oor die betekenis van <Merktekens> and added DESCR even though it’s not actually an identifier. I took DESCR out of the identifiers set and presto! Dit het alles uitgewerk.

I hope this saves someone some grief 🙂

Technorati Tags: , , ,