Category Archives: November 2007

MUSCUS refert me mea Column nomen est Reserved vel In Usu … Sed suus Non

UPDATE 12/04/07: Videte this Microsoft KB (http://support.microsoft.com/kb/923589) enim related notitia.

Actu, vertit ex est, sed 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, sed in finem ex est hoc:

  • 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. Therefore, "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 facto, 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"). Alicubi in linea, a 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, autem, remained but in the "_Hidden" group. If someone knows better, please let me know via email 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.

</finem>

OM praesentissimum Data Via a Consuetudo List (aut, Tamen Alia OM Data Displayor [sicut YACC, sed diversis])

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

Agitur agmen posset creari, deletum et re-creata in alia environment, so I knew it wasn’t a reserved name. Autem, 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, utique, by standard sharepoint features).

SharePoint amet Workflow Consuetudo Actionis — Observatione About <Agro Tie amet Type =”StringBuilder” … />

Ut wisi magna vivos observatur differentia inter has duas definitiones:

<FieldBind Field = "InParam1" Excogitatoris Type = "String adipiscing" Id = "II" Text = "Input parameter # I" />

versus:

<FieldBind Field = "InParam1" Id = "II" Text = "Input parameter # I" />

Primo ostendit hoc in SPD:

imaginem

haec ostendit sicut hoc:

imaginem

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 🙂

Hoc est, observetur: StringBuilder sino vos ædificare filum (Manifestum) commiscendo simul filum literals et notitia workflow (via the "Add Lookup" pyga in inferiorem sinistram angulo). When you use the Add Lookup button, it inserts a token in the form "[%signum%]". When SharePoint invokes your custom action, (C # code in causam meam), SharePoint transit signum ipsum, not the value of the token. If you use the default designer type (secundi generis), SharePoint dilatat actu et transit signum valoris signum actionis.

StringBuilder = BAD, Annum amet type = BONA.

Utique, 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 (quod per accidens est prorsus quod facit subiectum creare dynamicam actionem email, sed quod est subiectum alterius ingressum blog, Har Har).

<Finis />

Immatura Workflow Activation — A Non-medica Solutio

UPDATE: Hoc MSDN disputatione, maxime ultimum introitu: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. It describes a condition that may short circuit this whole thing. In short, simplex sit amet agros facere saltem.

Mihi documentum bibliotheca sustinet octo contentus genera.

I have a SharePoint Designer workflow that wants to calculate and assign a "reminder date" simpliciter per subtractionem 30 ex diebus alterius columnae, "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." (Vos can lego magis ac magis substantialem EXERCITATIO-descendit de huiusmodi KPI hic).

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.

Hoc ipsum non operari cum upload documento.

I upload the document and I am presented with the meta data entry screen. Ad hoc, I’m already in trouble. SharePoint has already, praepropere a prospectu, fired the workflow. I haven’t had a chance to pick the correct content type nor assign a due date. Simul, 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. Ita … et accensus est workflow meum cum supplicio, 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, Ego recta Eligunt content type, enter the meta data and submit. The pause completes and the workflow proceeds as needed. (Nota quod in environment, timer workflow activities from SPD do not work out of the box. You may have the same trouble. Videte hic pro more details).

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, sed adhuc non placet.

Scripsi hoc in forums hic MSDN: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1

SharePoint Obses Rerum primario / Vitare Commune foveisque

UPDATE 12/18/07: Videre Paulus Liebrand scriptor articulum technicas consequatur tollendum aut inflexo in default coetus nomina (videre comment infra ut bene).

Overview:

SharePoint security is easy to configure and manage. Autem, 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. (Fateor me ad hoc problema). This blog entry hopefully provides a useful SharePoint security primer and points towards some security configuration best practices.

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

Fundamentalum:

Usibus hoc overview, quattuor sunt rationes fundamentales securitatem: users / coetibus, securable objecta, licentiam gradus et hereditátem.

Users et Groups ut effringerent:

  • Singulorum users: Traxit ab agente creato album vel directe in SharePoint.
  • Coetibus: 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" ad speciem obiecti securable.

Securable objecta saltem ut effringerent:

  • Situs
  • Documento bibliothecis
  • Libelli et singula in scripto bibliothecis
  • Folders
  • Variis occasus BDC.

Ibi alia obiecta securable, sed vos adepto picture.

Licentiam campester: Fasciculus granular / low level access rights that include such things as create/read/delete entries in lists.

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

Users et coetus securable obiecta pertinent ad gradus per licentiam et hereditátem.

Maxime intelligere Obses Regulis, umquam :

  1. Coetus simpliciter sunt collectiones users.
  2. Coetus intra global collection site (i.e. Nulla eu nibh ut aliquid definire amet).
  3. Coetus nomen non obstantibus, non convivia, et in se, have any particular level of security.
  4. Groups have security in the context of a specific securable object.
  5. Permittente vobis tribuat diversis ordinibus eidem group omne obiectum securable.
  6. Textus applicatio ex hoc omnes policies tubć (vide infra).

Securitatem administratione coetus in mari perierunt et user amet semper inniti haec axiomata praeesse intelligit, et securitati suae conformatione.

Commune foveisque:

  • Coetus falso nomina important permissu: Ex arca archa, 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" coetus potest non conferre ad omnes, sed tantum legere, (enim). This would not be a good idea, Manifestum, cum esset valde turbatio.
  • Coetus non definitur ad aliquid site gradum. 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" link. 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.
  • Coetus sociari non variantur per site (i.e. coetus ubivis sit amet): Consider the group "Owner" et duo sites, "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, Obvius ut populus, et per HR site links Groups, 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 facto, I’m removing her from the global Owners group. Hilarity ensues.
  • Defecto nominare coetus fundatur in speciei partes: 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, Ego creavi duo novum Sodalicium: "HR Owners" and "Logistics Owners" et assignamus pro cuiusque gradus sensibilis licentia requiritur summam minimam et pro users ut faciat opus suum.

Alius utilis References:

Si secundum hoc fecistis:

Please let me know your thoughts via the comments or email me. If you know other good references, idem placeat facere!

Technorati Tags:

Vivos et Securus: Creare a Data View Web Part (DVWP)

Est a opes magna notitia in WSS 3.0 Notitia View Web Part (DVWP) on the web from several sources. Autem, 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" series alloqui eam.

Sequi vestigia creare notitia visum partem telam (DVWP). They are based on an "Announcements" pars telam, sed ad maximam listas.

  1. Aliquam erat volutpat partis et addere illud a site web.
  2. Aperire site in SharePoint Designer.
  3. Aperi situs default.aspx.
  4. Select the Announcements web part and right-click.
  5. Ex contineo contigi menu, select "Convert to XSLT Data View".

Excogitatoris SharePoint notifies vobis quod hoc site Lorem nunc a situ definition. Quod suus non necessario malum, Sed est magna implicationes (transacta, upgrade, alii) which are beyond the scope of this little "Quick and Easy" introitu. To get more information on this subject, Ego suadeo libros hic Fringilla ut Penitus quaero.

Confirmandas recte fecisse dicas:

  1. Propinquus quod re-patefacio textus pasco (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" ex menu.
  3. Tool ad ius aperit panel.
  4. Panel mutatum ex consue paro bene ut hoc:
imaginem

“Potest non adepto album Te aeternum patrem agmen proprietas a SharePoint album” — description / opus-arounds

Hoc septimana, illa tandem quaestio delata explicabo consequat remota: Summa amet, conata patefacio excellere, quae videtur ad committitur operantes, sed tunc Praecedo esset pop usque errorem: "Cannot get the list schema column property from the SharePoint list". She was running office 2003, windows XP and connecting to MOSS.

Rimarer Internets et viderunt nihil autem speculatio 100% definitive. Hence, post haec.

Forsit: Exporting praestare visum, quod continet date (date = notitia typus agminis).

Quid fecit propter nos: Convert the date to a "single line of text". Igitur, convertere ad eam diem.

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

Mendum hoc ingens umbra super MCMXXXIV data huius modi in mente, sic erant 'iens futurus a Microsoft quaerentem a decretoriae responsionis, et fiducialiter agam, et update stipes est hic in proximo breve tempus cum eorum notitia officiali respondere et hotfix.

Alia references:

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

<finem>

Scribet ad mea blog.

Technorati Tags: ,

Vivos et Simplex: Mittere email cum immersa Hyperlink a SharePoint amet workflow

Semel vel bis mensis, aliquis postes a forum quaestio: "Quomodo includit hyperlinks ad URL scriptor quod sunt clickable a SharePoint amet email?"

Obtulit sine comment: (bene, actu est plura post imaginem):

imaginem

Becky Isserman sequitur cum a benevolens explicatione in quam ad Embed a link ad item in in email: 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

Novum remissionis: SharePoint amet Workflow vitae (filum flexibus functiones)

UPDATE: Hic meo cogitationes in commercializing hoc project: http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!569.entry

Ego fuit occupatus operantes in mea Codeplex consilium est statim focused in providente filum flexibus tractus ad workflows creata per SharePoint amet.

Hic enim details:

Project domum: http://www.codeplex.com/spdwfextensions

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

Versionem 1.0 includit sequenti nova:

Munus Descriptio (si non idem. Net munus)
NUM-entries() Redit in numero "entries" in a string as per a specified delimiter.

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

Entry() Returns the nth token in a string as per a specified delimiter.
Longitudo String.Length
Restituo() String.Replace()
Continet() String.Contains()
Returns the word "true" or the word "false".
Substring(Committitur) String.Substring(Committitur)
Substring(Committitur,longitudo) String.Substring(Committitur,longitudo)
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".

A BDC runtime error explicatur

Ego causatur a BDC error hoc septimana quod manifestavit se in user interface et in in 12 alveare stipes at runtime.

Primum, hoc apparuit in in user interface:

Posset non agros inserere omnes Identifier valores recte exequi a SpecificFinder MethodInstance cum nomen … Accumsan porttitor input habent TypeDescriptors coniungitur cum omni Identifier definitur hoc Ente.

Hic 'a screen iecit:

clip_image001

Uideri possem facere verbum hoc 12 alveare stipes nutum (using my patented high-tech-don’t-try-this-at-home "mysterious errors" methodo):

11/14/2007 09:24:41.27 w3wp.exe (0x080C) 0x0B8C SharePoint Portal Server Business Data 6q4x High Exception in BusinessDataWebPart.OnPreRender: System.InvalidOperationException: Identifier ad valentiam ”, type ”, invalida. Expected Identifier value of Type ‘System.String’. at Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.FindSpecific(Obiectum[] subIdentifierValues, LobSystemInstance lobSystemInstance) at Microsoft.SharePoint.Portal.WebControls.BdcClientUtil.FindEntity(Entitate Entitas, Obiectum[] userValues, LobSystemInstance lobSystemInstance) at Microsoft.SharePoint.Portal.WebControls.BusinessDataItemBuilder.GetEntityInstance(View desiredView) at Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.GetEntityInstance() at Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.SetDataSourceProperties()

Quæsivi circa et invenit in aliquo vestrum MSDN forum, but they weren’t enough for me to understand what I was doing wrong. I watched a webcast by Ted Pattison quod meae cuneum squirreled ablata fuerit cultor est, et venit ad animadverto forsit meo.

In meam ADF, Ego coniuncta ad database ut ostensum SQL:

            <Proprietas Nomen="RdbCommandText" Typus="System.String">
              <![CDATA[
                OPTO
                      , CARRIER_ID, EFFDT, DESCR, EFF_STATUS, TAXPAYER_ID, NETWORK_ID, FRT_FORWARD_FLG, ALT_NAME1, ALT_NAME2, LANGUAGE_CD,
                      RUS, ADDRESS1, ADDRESS2, ADDRESS3, ADDRESS4, CIVITAS, NUM1, NUM2, HOUSE_TYPE, ADDR_FIELD1, ADDR_FIELD2, ADDR_FIELD3,
                      COMIVA, LOQUOR, Praesent, GEO_CODE, IN_CITY_LIMIT, COUNTRY_CODE, Phone, PROPAGATIO, Fax, LAST_EXP_CHK_DTTM, FREIGHT_VENDOR,
                      INTERLINK_DLL, TMS_EXCLUDE_FLG
                 (nolock)
                UBI
                  (Leas <> 'Vomere) et
                  (demitto(CARRIER_ID) >Inferior-(@ MinID)) et
                  (demitto(CARRIER_ID) <Inferior-(@ MaxId)) et
                  (demitto(DESCR) Sicut inferiora(@ InputDescr))
                ]]>
            </Proprietas>

SQL DBA, si quis a me, et ego suus datur intelligi quod specialis view they created just for me. The unique key there is CARRIER_ID.

Ego introducta est hic cimex:

      <Identifiers>
        <Identify Nomen="CARRIER_ID" TypeName="System.String" />
        <Identify Nomen="DESCR" TypeName="System.String" /> 
</Identifiers>

Alicubi in linea, Ego gessisset confundas me super significationem <Identifiers> and added DESCR even though it’s not actually an identifier. I took DESCR out of the identifiers set and presto! Omne fermentatum.

Spero quod aliquis salvet aliquem dolorem

Technorati Tags: , , ,