ბარი არის ერთმანეთისგან საკმაოდ მაღალი წევრებთან MOSS

დღეს, I was working with a client and describing how to modify the content query web part and display additional bits of information from a content type.

"First, თქვენ დააკონფიგურიროთ CQWP დაკავშირება მისი მონაცემები წყაროები, მაშინ ექსპორტის ეს თქვენი სამუშაო, ცვლილებები <CommonViewFields>, ატვირთეთ, remove the original and now it’s ‘primed’ to display those other columns. შემდეგი, open up SharePoint designer, navigate to the site collection root and locate ItemStyle.xsl. Copy one of the templates as a useful starting point. Go back and modify the CQWP to make use of this new template. და ბოლოს, modify the template to render your new fields! (Don’t forget to check it back in so that other users can see the results)."

It’s all quite clear to me (and most of us SharePoint developer types) what’s going on and how it’s quite nice, ნამდვილად, რომ მონაცემების მოძიება ასპექტები CQWP იმდენად კარგად ცალკე მონაცემების პრეზენტაცია ასპექტები. მაგრამ, ეს ასე არ არის ადვილი ასახსნელია, არის?

<ბოლოს />

პროგრამები Tags: ,

ჩვენების ინფორმაციის შეკითხვის ვებ ნაწილი შედეგები Grid / მაგიდის

მიმოხილვა და მიზანი

იმ ყუთში, Moss’ ინფორმაციის შეკითხვის ვებ ნაწილი (CQWP) მონიტორები მისი შედეგები სიაში ფორმატში, similar to search results. It is also possible to display the results in a grid format (i.e. HTML მაგიდის ფორმატში). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.

ბიზნეს სცენარი

I have worked with a client on an enterprise-wide MOSS rollout. We have designed their taxonomy such that projects are first class citizens in the hierarchy and have their own top level site. Project managers maintain a singleton list of project summary information, როგორიცაა სათაური, ბიუჯეტი, მოსალოდნელია დასრულების თარიღი, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, როგორც ჩანს, ამ:

იმიჯი

ტექნიკური მიდგომა ბევრად იგივე, როგორც ეს აღწერილია აქ (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). The CQWP uses an XSL transform to emit HTML for the browser to render.

I always envision the result before diving into the XSL because XSL is a nightmare. Here’s my desired result:

იმიჯი

HTML მსგავსი ქმნის, რომ შედეგი:

<html>
 <სხეულის>
 <ცენტრი>
 <მაგიდა სასაზღვრო= 1>

<!-- Labels ->
 <tr bgcolor= Blue>
 <td><font ფერი= თეთრი><>პროექტის დასახელება</></font></td>
 <td უერთდებიან= უფლება><font ფერი= თეთრი><>დასრულება თარიღი</></font></td>
 <td უერთდებიან= უფლება><font ფერი= თეთრი><>ბიუჯეტი</></font></td>
 <td უერთდებიან= უფლება><font ფერი= თეთრი><>ფაქტობრივი ხარჯი</></font></td>
 <td><font ფერი= თეთრი><>სრული სტატუსი</></font></td>
 </tr>

<tr>
 <td>ხელახალი მავთულები კომპიუტერული ოთახი.</td>
 <td უერთდებიან= უფლება>02/01/08</td>
 <td უერთდებიან= უფლება>22,500.00</td>
 <td უერთდებიან= უფლება>19,000.00</td>
 <td>გრძელდება</td>
 </tr>

<tr>
 <td>დებულება სერვერებზე SQL განახლება</td>
 <td უერთდებიან= უფლება>04/01/08</td>
 <td უერთდებიან= უფლება>7,500.00</td>
 <td უერთდებიან= უფლება>0.00</td>
 <td>იგეგმება</td>
 </tr>

</მაგიდა>
 </ცენტრი>
 </სხეულის>
</html>

მიდგომა

დაიცავით ამ ნაბიჯებს, რათა შეიქმნას ქსელის:

  1. იდენტიფიცირება კომპონენტების ქსელის (რიგები / სვეტები).
  2. განსაზღვრავს და შექმნას აუცილებელი საიტი სვეტები.
  3. შექმენით ქვე საიტები პროექტები და სინგლეტონი სიები.
  4. დამატება CQWP რომ ვებ გვერდზე და კონფიგურირება მოძიება შენი სიები.
  5. შეცვლა CQWP-ს XML შეგროვება up დამატებითი სვეტები.
  6. შეცვლა XSL წარმოქმნის მაგიდა.

I’m going to concentrate on number six. Numbers one through four are straight-forward and something that any CQWP user has already done. Number five has been well-documented by others including this exhaustive screen-shot laden article from MSDN აქ (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) და Heather სოლომონის წაკითხვა აქ (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

კაკალი და ჭანჭიკები

დასაწყისი და გადადგას ნაბიჯები, ერთი მეშვეობით ხუთი მიხედვით MSDN დოკუმენტაცია და Heather სოლომონ სტატია.

ამ ეტაპზე, თქვენ დაემატა თქვენს CQWP გვერდზე და თქვენ თქვენი <CommonViewFields> კონფიგურაცია, როგორც საჭიროა.

შემდეგ ჩვეულ ნაბიჯები, მე ამ შუალედური შედეგები:

1. შექმნა ინფორმაციის ტიპი, a templatized custom list for that content type and two sites. Here is the content type:

იმიჯი

აქ არის საიტი სტრუქტურა:

იმიჯი

2. დამატება CQWP შექმნის შემდეგ ჩემი პროექტი subsites და სინგლეტონი პროექტის შემაჯამებელი სიები:

იმიჯი

3. დამატება დამატებითი ინფორმაცია მინდა მეშვეობით <CommonViewFields>:

        <ქონების სახელი="CommonViewFields" ტიპის="სიმებიანი">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</ქონების>

შენიშვნა, რომ უნდა შევინარჩუნოთ ყველა ქონების სფეროები ერთ ხაზს, ან საერთოდ არ იმუშავებს (CQWP რომ მითხრა, რომ შეკითხვის დაბრუნდა არ არის პროდუქცია).

4. ამ ეტაპზე, we’re ready to move beyond the MSDN article and flip on over to Heather Solomon’s article. Follow her steps starting near step #5 რათა შეიქმნას ადრინდელს / unghosted version of ItemStyle.xsl. I follow Heather’s advice, მდე მეშვეობით ნაბიჯი 11 და მიიღოს ამ შუალედური შედეგები:

4.1: დაარქვით ჩემს XSL template შემდეგი რედაქციით:

<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">

მე ასევე ოდნავ შეცვალოს მისი ვარაუდით <XSL:for-თითოეული …> დამატებით <br /> tag უზრუნველყოს სუფთა ჩამონათვალი:

    <XSL:for-თითოეული შერჩევა="@ *">
      P:<XSL:ღირებულების შესახებ შერჩევა="სახელი()" /><br/>
    </XSL:for-თითოეული>

4.2: შევცვალო ვებ ნაწილი, go to appearance and select my "Grid" სტილი:

იმიჯი

მიმართვა ცვლილება და აი, შედეგიც:

იმიჯი

ჩვენ ვხედავთ, ზემოთ რომ სფეროებში ჩვენ გვინდა (პროექტის დასახელება, ხარჯზე, სტატუსი, და ა.შ.) are available for us to use when we emit the HTML. Not only that, but we see the names by which we must reference those columns in the XSL. მაგალითად, we reference Project Status as "Project_x005F_x0020_Name".

ამ ეტაპზე, ჩვენ დატოვება Heather ს ბლოგი და shoulders ამ გიგანტი, მე დამატება ჩემი საკუთარი ცოტა.

ContentQueryMain.xsl

შენიშვნა: როდესაც ცვლილებების ორივე ContentQueryMain.xsl აგრეთვე ItemStyle.xsl, თქვენ უნდა შეამოწმოს იმ ფაილებს უკან ადრე ხედავთ ეფექტი თქვენი ცვლილებები.

იყიდება ქსელის მიღების მიზნით, MOSS uses two different XSL files to produce the results we see from a CQWP. To generate the previous bit of output, we modified ItemStyle.xsl. MOSS actually uses another XSL file, ContentQueryMain.xsl to in conjunction with ItemStyle.xsl to generate its HTML. As its name implies, ContentQueryMain.xsl is the "main" XSL that controls the overall flow of translation. It iterates through all the found items and passes them one by one to templates in ItemStyle.xsl. We’ll modify ItemStyle.xsl to generate the open <მაგიდა> tag ადრე ასხივებენ პირველი რიგის მონაცემები და დახურვის <მაგიდა> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" template in ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.

გამოყენება Heather სოლომონ ტექნიკურად, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:

იმიჯი

ჩვენ უნდა მოვახერხოთ, შემდეგი სახის ცვლილებები:

  • შეცვლა XSL template, "CallItemTemplate" that actually invokes our Grid template in ItemStyle.xsl. We will pass two parameters to the Grid template so that it will have the data it needs to conditionally generate opening and closing <მაგიდა> tags.
  • Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" პარამეტრების ისე, რომ LastRow შეიძლება გადაეცემა ჩვენი ქსელის შაბლონი.

Locate the template named "OuterTemplate.CallItemTemplate" განსაზღვრული სიმებიანი:

  <XSL:template სახელი="OuterTemplate.CallItemTemplate">

ჩანაცვლება მთელი template შემდეგი რედაქციით:

  <XSL:template სახელი="OuterTemplate.CallItemTemplate">
    <XSL:შეჩერება სახელი="CurPosition" />

    <!--
      Add the "LastRow" პარამეტრების.
      We only use it when the item style pass in is "Grid".
    -->
    <XSL:შეჩერება სახელი="LastRow" />

    <XSL:აირჩიოს>
      <XSL:როდესაც ტესტი="@ სტილი = 'NewsRollUpItem "">
        <XSL:ვრცელდება-თარგები შერჩევა="." რეჟიმი="itemstyle">
          <XSL:with-param სახელი="EditMode" შერჩევა="$cbq_iseditmode" />
        </XSL:ვრცელდება-თარგები>
      </XSL:როდესაც>
      <XSL:როდესაც ტესტი="@ სტილი = 'NewsBigItem "">
        <XSL:ვრცელდება-თარგები შერჩევა="." რეჟიმი="itemstyle">
          <XSL:with-param სახელი="CurPos" შერჩევა="$CurPosition" />
        </XSL:ვრცელდება-თარგები>
      </XSL:როდესაც>
      <XSL:როდესაც ტესტი="@ სტილი = 'NewsCategoryItem "">
        <XSL:ვრცელდება-თარგები შერჩევა="." რეჟიმი="itemstyle">
          <XSL:with-param სახელი="CurPos" შერჩევა="$CurPosition" />
        </XSL:ვრცელდება-თარგები>
      </XSL:როდესაც>

      <!--
              უღელტეხილის მიმდინარე პოზიცია და lastrow to Grid itemstyle.xsl template.
              ItemStyle.xsl გამოიყენებს, რომ გადასცემს ღია და დახურვის <მაგიდა> tags.
      -->
      <XSL:როდესაც ტესტი="@ სტილი = 'Grid "">
        <XSL:ვრცელდება-თარგები შერჩევა="." რეჟიმი="itemstyle">
          <XSL:with-param სახელი="CurPos" შერჩევა="$CurPosition" />
          <XSL:with-param სახელი="ბოლო" შერჩევა="$LastRow" />
        </XSL:ვრცელდება-თარგები>
      </XSL:როდესაც>

      <XSL:წინააღმდეგ შემთხვევაში>
        <XSL:ვრცელდება-თარგები შერჩევა="." რეჟიმი="itemstyle">
        </XSL:ვრცელდება-თარგები>
      </XSL:წინააღმდეგ შემთხვევაში>
    </XSL:აირჩიოს>
  </XSL:template>

კომენტარები აღწერს მიზნით ცვლილებები.

რა თქმა უნდა, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:

<XSL:template სახელი="OuterTemplate.Body">

გადახვევა მეშვეობით ინსტრუქციები OuterTemplate.Body და ჩადეთ LastRow პარამეტრების შემდეგი რედაქციით (ნაჩვენებია კომენტარის კურსივით):

<XSL:ზარის template სახელი="OuterTemplate.CallItemTemplate">
  <XSL:with-param სახელი="CurPosition" შერჩევა="$CurPosition" />
  <!-- ჩადეთ LastRow პარამეტრების. -->
  <XSL:with-param სახელი="LastRow" შერჩევა="$LastRow"/>
</XSL:ზარის template>

მას შემდეგ, რაც ეს ყველაფერი, ჩვენ საბოლოოდ არ რამ შეიქმნა სათანადოდ ისე, რომ ჩვენი ItemStyle.xsl შეიძლება გადასცემს <მაგიდა> tags at უფლება ადგილი.

ItemStyle.Xsl

შენიშვნა: ისევ, შემოწმება ItemStyle.xsl მიღების შემდეგ რაიმე ცვლილება ისე, რომ ხედავთ ეფექტი ის ცვლილებები.

ჩვენ გვყავს ორი ამოცანა აქ:

  • Replace the entire Grid template. You can copy/paste from below.
  • Add some mumbo jumbo outside the template definition that enables "formatcurrency" template to work. (თქვენ შეგიძლიათ თქვათ, რომ მე tenuous სახელური XSL).

პირველი, უახლოეს დაბრუნება of ItemStyle.xsl, დაამატოთ ეს ხაზი:

  <!-- ზოგიერთი mumbo jumbo, რომელიც საშუალებას გვაძლევს ცარიელია U.S. ვალუტის. -->
  <XSL:ათობითი ფორმატის სახელი="პერსონალის" ციფრი="D" />

  <XSL:template სახელი="სტანდარტული" ემთხვევა="*" რეჟიმი="itemstyle">

შენიშვნა, რომ მე დასძინა, რომ უშუალოდ <XSL:template name="Default" …> definition.

შემდეგი, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, but don’t hesitate to email me or leave comments on my blog if you have questions.

  <XSL:template სახელი="Grid" ემთხვევა="Row[@ სტილი = 'Grid "]" რეჟიმი="itemstyle">

    <!--
      ContentMain.xsl passes CurPos and Last.
      We use these to conditionally emit the open and closing <მაგიდა> tags.
    -->
    <XSL:შეჩერება სახელი="CurPos" />
    <XSL:შეჩერება სახელი="ბოლო" />

    <!-- The following variables are unmodified from the standard ItemStyle.xsl -->
    <XSL:ცვლადი სახელი="SafeImageUrl">
      <XSL:ზარის template სახელი="OuterTemplate.GetSafeStaticUrl">
        <XSL:with-param სახელი="UrlColumnName" შერჩევა="'ImageUrl'"/>
      </XSL:ზარის template>
    </XSL:ცვლადი>
    <XSL:ცვლადი სახელი="SafeLinkUrl">
      <XSL:ზარის template სახელი="OuterTemplate.GetSafeLink">
        <XSL:with-param სახელი="UrlColumnName" შერჩევა="'LinkUrl'"/>
      </XSL:ზარის template>
    </XSL:ცვლადი>
    <XSL:ცვლადი სახელი="DisplayTitle">
      <XSL:ზარის template სახელი="OuterTemplate.GetTitle">
        <XSL:with-param სახელი="სათაური" შერჩევა="@Title"/>
        <XSL:with-param სახელი="UrlColumnName" შერჩევა="'LinkUrl'"/>
      </XSL:ზარის template>
    </XSL:ცვლადი>
    <XSL:ცვლადი სახელი="LinkTarget">
      <XSL:თუ ტესტი="@OpenInNewWindow = 'True'" >_blank</XSL:თუ>
    </XSL:ცვლადი>

    <!--
      Here we define a variable, "tableStart".  This contains the HTML
      that we use to define the opening of the table as well as the column
      labels.  Note that if CurPos = 1, it includes the HTML in a CDATA tag.
      Otherwise, it will be empty.

      The value of tableStart is emited every time ItemStyle is called via
      ContentQueryMain.xsl.
    -->
    <XSL:ცვლადი სახელი="tableStart">
      <XSL:თუ ტესტი="$CurPos = 1">
        <![CDATA[
        <table border=1>
          <tr bgcolor="blue">
            <td><font color="white"><ბ>პროექტის დასახელება</ბ></font></td>
            <td align="right"><font color="white"><ბ>დასრულება თარიღი</ბ></font></td>
            <td align="right"><font color="white"><ბ>ბიუჯეტი</ბ></font></td>
            <td align="right"><font color="white"><ბ>ფაქტობრივი ხარჯი</ბ></font></td>
            <td><font color="white"><ბ>სრული სტატუსი</ბ></font></td>
          </tr>
        ]]>
      </XSL:თუ>
    </XSL:ცვლადი>

    <!--
      Another variable, tableEnd simply defines the closing table tag.

      As with tableStart, it's always emited.  This is why its value is
      assigned conditionally based upon whether we've been passed the last
      row by ContentQueryMain.xsl.
    -->
    <XSL:ცვლადი სახელი="tableEnd">
      <XSL:თუ ტესტი="$CurPos = $Last">
        <![CDATA[ </მაგიდა> ]]>
      </XSL:თუ>
    </XSL:ცვლადი>

    <!--
      Always emit the contents of tableStart.  If this is not the first
      row passed to us by ContentQueryMain.xsl, then we know its value
      will be blank.

      Disable output escaping because when tableStart it not blank, ეს
      .  თუ
      , it will generate
      stuff like "&ლ;მაგიდა&gt;" instead of "<მაგიდა>".
    -->
    <XSL:ღირებულების შესახებ შერჩევა="$tableStart" გაუქმდება და გამოშვების-აფარებს="დიახ"/>


    <tr>
      <!--
      P:Project_x005F_x0020_Name
      :Project_x005F_x0020_End_x005F_x0020_Date
      :Project_x005F_x0020_Budget
      :Project_x005F_x0020_Expenses
      :Project_x005F_x0020_Status
      -->
      <td>
        <XSL:ღირებულების შესახებ შერჩევა="@ Project_x005F_x0020_Name"/>
      </td>

      <td უერთდებიან="უფლება">
        <XSL:ღირებულების შესახებ შერჩევა="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
      </td>

      <td უერთდებიან="უფლება">
        <XSL:ზარის template სახელი="formatcurrency">
          <XSL:with-param სახელი="ღირებულება" 
შერჩევა="@ Project_x005F_x0020_Budget"></XSL:with-param> </XSL:ზარის template> </td> <td უერთდებიან="უფლება"> <XSL:ზარის template სახელი="formatcurrency"> <XSL:with-param სახელი="ღირებულება" შერჩევა="@ Project_x005F_x0020_Expenses">
</XSL:with-param> </XSL:ზარის template> </td> <td> <XSL:ღირებულების შესახებ შერჩევა="@ Project_x005F_x0020_Status"/> </td> <!-- ყველა ქვემოთ კომენტარში აღნიშნავს, რომ ნათელი რამ. თუმცა, მოუტანს მას უკან და პერსონალი მას <td> სანახავად მისი         . --> <!-- <div id="linkitem" class="item"> <XSL:if test="string-length($SafeImageUrl) != 0"> <div class="image-area-left"> <a href="{$SafeLinkUrl}" target="{$LinkTarget}"> <img class="image-fixed-width" src="{$SafeImageUrl}"
alt="{@ ImageUrlAltText}"/> </a> </div> </XSL:თუ> <div class="link-item"> <XSL:ზარის template
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a href="{$SafeLinkUrl}"
target="{$LinkTarget}" title="{@ LinkToolTip}"> <XSL:value-of select="$DisplayTitle"/> </a> <div class="description"> <XSL:value-of select="@Description" /> </div> </div> </div>
--> </tr> <!-- გადასცემს დახურვის მაგიდა tag. თუ ჩვენ არ ვართ ბოლო ზედიზედ, ეს იქნება ცარიელი. --> <XSL:ღირებულების შესახებ შერჩევა="$tableEnd" გაუქმდება და გამოშვების-აფარებს="დიახ"/> </XSL:template> <XSL:template სახელი="formatcurrency"> <XSL:შეჩერება სახელი="ღირებულება" შერჩევა="0" /> <XSL:ღირებულების შესახებ შერჩევა='ფორმატი ნომერი($ღირებულება, "$DDD,DDD,DDD.DD", "staff")' /> </XSL:template>

სტანდარტული WSS / MOSS მონაცემთა შეყვანის დაფები მხარს არ უჭერს კასკადური Drop ზარალი (ან სხვა შიდა მხრიდან კომუნიკაცია)

განახლების (04/2008): ეს დიდი წაკითხვა შესვლის გვიჩვენებს კარგი javascript დაფუძნებული მიდგომა ამ პრობლემის: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

განახლების II: (04/2008): ეს ბლოგი შესვლის გამოიყურება ჰპირდება ასევე: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

რამდენიმე კვირაში, თუ არა ყოველდღე, forum users describe a requirement that would normally be met via cascading drop-downs. მაგალითად, მე ორი ჩამოსაშლელი კონტროლი:

  • ჩამონათვალი U.S. ქვეყნების
  • ჩამონათვალი U.S. ქალაქებში.

როგორც პასუხისმგებელი UI პროვაიდერები, ჩვენ გვსურს მუშაობას მსგავსი:

  • პოლ ირჩევს U.S. state from the drop-down.
  • This causes the cities drop-down to filter only those cities that belong to the selected state.
  • პოლ ირჩევს ქალაქის ამ გაფილტრული სია.

There is no out-of-the-box support for this feature. სინამდვილეში, there is no OOB support for any kind of direct intra-form communication. This includes programmatically hiding/enabling/disabling fields in response to field changes elsewhere on the form.

რეალური მიზანი ამ მუხლის აღწერს შესაძლო გადაწყვეტილებების და ეს ვარიანტი, როგორც ვიცი მათ:

  1. Develop a custom column type. As a custom-column-developer, you have full control over the "world" of that custom column. You can implement a cascading drop-down that way.
  2. Consider using workflow. In some cases, you want to automatically assign a value to field based on another field’s value. ამ შემთხვევაში, ჩვეულებრივ ცდილობენ გამოიყენონ გათვლილი სვეტი, მაგრამ ზოგიერთი ჯერ, it just won’t get the job done. SharePoint Designer workflow is a relatively administer-friendly alternative to dropping down into code and visual studio. If you go this route, უნდა იცოდეს საკითხი მიმართა ამ მუხლის (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. თარიღის ელფოსტის: მომწონს workflow, this is an after-the-fact solution. Your event handler is a .NET assembly (C #, VB.NET) to which SharePoint passes control. The object you develop has access to the data of the list (და მთელი ობიექტი მოდელი) და შეიძლება რაიმე საჭირო გაანგარიშებით.
  4. Use SharePoint Designer to create custom entry forms. I don’t have direct experience with this approach, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Roll თქვენი ASP.NET მონაცემთა შეყვანის ფუნქცია (როგორც ცალკე ვებ გვერდზე ან როგორც ვებ ნაწილი) და გამოყენება, რომ ნაცვლად.

თუ ვინმეს იცის სხვა და / ან უკეთესი ვარიანტები, გთხოვთ კომენტარის და მე განაახლებს ორგანოს ჩანაწერი.

<ბოლოს />

პროგრამები Tags:

Yes/No (თოლიას) ფილტრაცია შინაარსი შეკითხვის ვებ ნაწილი

To filter for a query for the Yes/No check box entitled "PG Milestone", კონფიგურაციის CQWP მსგავსი:

იმიჯი

ეს არის კიდევ ერთი ერთი იმ აშკარა ოდესღაც თქვენ-ვიცი, მაგრამ ძნელად პოულობენ-პასუხისას-კითხვებზე: როგორ გავფილტროთ on დიახ / არა თოლიას გამოყენებით შინაარსი შეკითხვის ვებ ნაწილი.

პირველი ძებნის შედეგი I find using the search term "filter yes/no content query web part" არის ბინა out არასწორი, ასე მეგონა, მე მინდა რომ ეს იყო და თუ მას შეუძლია შეცვალოს არასწორი შედეგი ტიპიური ძიების შედეგების.

ეს საკმაოდ ადვილი: True values = "1" and false values do not equal "1" (საკმაოდ retro, რეალურად).

აღნიშნულ მაგალითად, I created site column of type "Yes/No (ჩამრთველი)" named "PG Milestone". I added it to a doc library, ატვირთული რამდენიმე დოკუმენტები, მითითებული მნიშვნელობა წყვილი და ტესტირება იგი.

<ბოლოს />

შექმნა ბარი გრაფიკის SharePoint

მიმოხილვა:

(განახლების 12/04/07: დაამატა კიდევ ერთი საინტერესო რესურსი ბოლომდე აკავშირებს კიდევ ერთი დღიურში, რომ ეხება ეს გავლით ძალიან საინტერესო ვებ ნაწილი)

This blog entry describes how to create a bar graph in SharePoint. This works in both WSS and MOSS environments as it only depends upon the data view web part.

საერთო მიდგომა ასეთია:

  1. შექმნა სია ან დოკუმენტის ბიბლიოთეკა, რომელიც შეიცავს მონაცემთა გსურთ გრაფაში.
  2. მოათავსეთ ასოცირებული დოკუმენტის ბიბლიოთეკა / საბაჟო სიაში გადატანა გვერდზე და გარდაქმნას იგი და მონაცემთა ხედი ვებ ნაწილი (DVWP).
  3. შეცვლა DVWP ნახვა XSL გენერირება HTML, რომელიც აჩვენებს, როგორც გრაფაში.

ბიზნეს სცენარი / Setup:

მე შევქმენი საბაჟო სიაში სტანდარტული სათაური სვეტი და ერთი დამატებითი სვეტი, "Status". This models (ძალიან simplistically) an "Authorization For Expense" სცენარი, სადაც ტიტული წარმოადგენს პროექტს და სტატუსი ღირებულება სიიდან:

  • ინიციატივით გამოდის
  • მიმდინარეობს
  • შეფერხდა

მიზანია აწარმოოს ინტერაქტიული ჰორიზონტალური ბარი გრაფაში, რომელიც აჩვენებს ამ სტატუსის კოდები.

მე დასახლებული სიაში და იგი ასე გამოიყურება:

იმიჯი

მონაცემთა ანკეტის ვებ ნაწილი:

შექმნა DVWP დამატებით საბაჟო სიაში გვერდი (საიტი გვერდზე ჩემს შემთხვევაში) და მითითებებს აქ (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

გარდა იმისა, რომ უბრალოდ ქმნის DVWP, we also need to set the paging property to show all available rows. ჩემთვის, ამ გამოიყურება მსგავსი რამ:

იმიჯი

ამ ეტაპზე, I always close SPD and the browser. I then re-open the page using the browser. This avoids accidentally mucking up the web part layout on the page.

შეცვლა XSLT:

ეს ახლა შეცვალოს XSLT.

I always use visual studio for this. (აგრეთვე აქ მნიშვნელოვანი შენიშვნა შესახებ Intellisense, რაც ხელს შეუწყობს თქვენ ბევრი).

შევქმნა ცარიელი გარემონტებული ოთხი ახალი ფაილი (replacing the words "Original" and "New" საჭიროების შემთხვევაში):

  • Original.xslt
  • New.xslt
  • ორიგინალური Params.xml
  • ახალი Params.xml

ჩემს შემთხვევაში, როგორც ჩანს, ამ:

იმიჯი

Modify the web part and copy the params and XSL to the "Original" მობილური ვიზუალური სტუდია.

ობიექტური აქ გამოიწვიოს XSL ტრანსფორმაციის შედეგები არ მივიღებთ უკან DVWP შეკითხვის შევიდა HTML, რომ უწევს როგორც გრაფაში.

ამ მიზნით, it helps to first consider what the HTML should look like before we get confused by the insanity that is known as "XSL". (იმისათვის რომ ნათელი, შემდეგ უბრალოდ მაგალითი; don’t type it or copy/paste into visual studio. I provide a full blow starting point for that later in the write-up). The following sample graph is rendered as per the HTML immediately following:

Sample Bar Graph

შესაბამისი HTML:

<html>
<სხეულის>
<ცენტრი>
<მაგიდა ტელეკომპანია 80%>
<tr><td><ცენტრი>ჰორიზონტალური ბარი დიაგრამა</td></tr>
<tr>
<td align="center">
<table border="1" ტელეკომპანია 80%>
<tr>
<td width = 10%>გახსნა</td>
<td><მაგიდა cellpadding ="0" cellspacing ="0" border = 0 width = 50%><tr bgcolor = red><td>&nbsp;</td></tr></მაგიდა></td>
</tr>
<tr>
<td width = 10%>დახურვის</td>
<td><მაგიდა cellpadding ="0" cellspacing ="0" border = 0 width = 25%><tr bgcolor = red><td>&nbsp;</td></tr></მაგიდა></td>
</tr>
<tr>
<td width = 10%>შეფერხდა</td>
<td><მაგიდა cellpadding ="0" cellspacing ="0" border = 0 width = 25%><tr bgcolor = red><td>&nbsp;</td></tr></მაგიდა></td>
</tr>
</მაგიდა>
</td>
</tr>
</მაგიდა>
</სხეულის>
</html>

I used a dead simple approach to creating my bars by setting the background color of a row to "red".

მიიღოს-მოშორებით აქ არის ეს: და ბოლოს, ყველა ვაკეთებთ ქმნის HTML ერთად რიგები და სვეტები.

თარგი XSLT:

I’ve copied the XSLT that generates a horizontal bar graph. It’s fairly well commented so I won’t add much here except for these notes:

  • I დაიწყო სტანდარტულ XSL, რომ SharePoint დიზაინერი მომცა, როდესაც მე პირველად შეიქმნა DVWP.
  • მე შეძლო დაჭრა ეს ქვემოთ SPD-ს 657 ხაზები 166 lines.
  • მე არ არეულობას გარშემო პარამეტრების ფაილში (რაც ცალკე XSL და თქვენ იცით რას ვგულისხმობ, როცა წასვლა ცვლილებები DVWP თავად; არსებობს ორი ფაილი თქვენ შეგიძლიათ). თუმცა, გამარტივების მიზნით იგი, I did remove nearly all of them from the XSL. This means that if you want to make use of those parameters, you just need to add their variable definitions back to the XSL. That will be easy since you will have the original XSL variable definitions in your visual studio project.
  • You ought to be able to copy and paste this directly into your visual studio project. მაშინ, remove my calls and insert your own calls to "ShowBar".
  • საბურღი ქვემოთ მუშაობს შექმნით <კონფერენცია> მსგავსი: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. This technique may be of value in other contexts. თავიდან, ვფიქრობდი უნდა შეესაბამებოდეს უფრო რთული ფორმატში: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, but in my environment that is not necessary. The List’s URL is passed to us by SharePoint so this is quite easy to generalize.

აქ:

<XSL:სტილების მობილური="1.0" გამორიცხავს-შედეგზე ინდექსები="რს ჩ o s ddwrt dt msxsl" 
xmlns:msxsl="urn:სქემები-microsoft-com:XSLT" xmlns:XSL="http://www.w3.org/1999/XSL/Transform"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:ვერხვი="http://schemas.microsoft.com/ASPNET/20" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="urn:სქემები-microsoft-com:ოფისში" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:რს="urn:სქემები-microsoft-com:rowset" xmlns:ჩ="#RowsetSchema"
xmlns:ddwrt2="urn:ფორუმი:შიდა"
> <XSL:გამომავალი მეთოდი="html" აბზაცის="წლის" /> <XSL:ათობითი ფორმატის NaN="" /> <XSL:შეჩერება სახელი="ListUrlDir"></XSL:შეჩერება> <!-- მე უნდა ამ მხარდასაჭერად საბურღი-down. --> <XSL:template ემთხვევა="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ვერხვი="http://schemas.microsoft.com/ASPNET/20"
> <XSL:ცვლადი სახელი="dvt_StyleName">მაგიდის</XSL:ცვლადი> <XSL:ცვლადი სახელი="რიგები" შერჩევა="/dsQueryResponse / რიგები / სკანდალი" /> <XSL:ცვლადი სახელი="dvt_RowCount" შერჩევა="ითვლიან($რიგები)" /> <XSL:ცვლადი სახელი="IsEmpty" შერჩევა="$dvt_RowCount = 0" /> <XSL:ცვლადი სახელი="dvt_IsEmpty" შერჩევა="$dvt_RowCount = 0" /> <XSL:აირჩიოს> <XSL:როდესაც ტესტი="$dvt_IsEmpty"> არ არსებობს მონაცემები, რომ გრაფაში!<br/> </XSL:როდესაც> <XSL:წინააღმდეგ შემთხვევაში> <!-- საინტერესო პერსონალის იწყება აქ. ჩვენ უნდა განვსაზღვროთ წყვილი ცვლადების თითოეული ზედიზედ გრაფაში: საერთო რაოდენობა           . --> <XSL:ცვლადი სახელი="totalProposed" შერჩევა="ითვლიან(/dsQueryResponse / რიგები / სკანდალი[ნორმალიზება სივრცე(@ სტატუსი) = 'ინიციატივით გამოდის "])" /> <XSL:ცვლადი სახელი="percentProposed" შერჩევა="$totalProposed div $ dvt_RowCount" /> <XSL:ცვლადი სახელი="totalInProcess" შერჩევა="ითვლიან(/dsQueryResponse / რიგები / სკანდალი[ნორმალიზება სივრცე(@ სტატუსი) = 'მიმდინარეობს "])" /> <XSL:ცვლადი სახელი="percentInProcess" შერჩევა="$totalInProcess div $ dvt_RowCount" /> <XSL:ცვლადი სახელი="totalStalled" შერჩევა="ითვლიან(/dsQueryResponse / რიგები / სკანდალი[ნორმალიზება სივრცე(@ სტატუსი) = 'ჩიხშია "])" /> <XSL:ცვლადი სახელი="percentStalled" შერჩევა="$totalStalled div $ dvt_RowCount" /> <!-- ჩვენ დავაფიქსირეთ ჩვენი HTML მაგიდა აქ. მე სესხების ზოგიერთი სტანდარტული           . მე ვფიქრობ, რომ პატივს მიაგებს           . --> <მაგიდა სიგანე="100%" cellspacing="0" cellpadding="2" სტილი="სასაზღვრო უფლება: 1 მყარი # C0C0C0; სასაზღვრო ბოლოში: 1 მყარი # C0C0C0; სასაზღვრო მარცხენა სტილი: მყარი; სასაზღვრო მარცხენა სიგანე: 1; სასაზღვრო ყველაზე სტილი: მყარი; სასაზღვრო ყველაზე სიგანე: 1;"> <tr> <td უერთდებიან="ცენტრი"> <მაგიდა სასაზღვრო="1" სიგანე="100%"> <!-- ყოველი მდგომარეობა, რომ ჩვენ გვინდა გრაფაში, we call the "ShowBar" template. ჩვენ გაიაროს ეს: 1. Label for ზედიზედ. ეს გადაკეთდა ჰიპერბმულის. 2. პროცენტი (ცვლადი ზემოდან). 3. ფაქტობრივი სფეროში სახელით კოდი ძირითადი სია. ეს                      . 4. საველე ღირებულება შეესაბამება არცერთი for #3. 5. სულ ნივთები ამ სტატუსის კოდი (არ გრანდიოზული საერთო ყველა                      ). ეს emits <tr></tr> და ჰორიზონტალური ბარი გრაფაში ხაზი. ჩვენ მოვუწოდებთ ამ template თითოეული სტატუსი კოდი გვინდა, ნახატის. --> <XSL:ზარის template სახელი="ShowBar"> <XSL:with-param სახელი="BarDisplayLabel" შერჩევა=""შემოთავაზებული""/> <XSL:with-param სახელი="BarPercent" შერჩევა="$percentProposed"/> <XSL:with-param სახელი="QueryFilterFieldName" შერჩევა=""სტატუსი""/> <XSL:with-param სახელი="QueryFilterFieldValue" შერჩევა=""შემოთავაზებული""/> <XSL:with-param სახელი="TotalItems" შერჩევა="$totalProposed"></XSL:with-param> </XSL:ზარის template> <XSL:ზარის template სახელი="ShowBar"> <XSL:with-param სახელი="BarDisplayLabel" შერჩევა=""შეჩერებულია""/> <XSL:with-param სახელი="BarPercent" შერჩევა="$percentStalled"/> <XSL:with-param სახელი="QueryFilterFieldName" შერჩევა=""სტატუსი""/> <XSL:with-param სახელი="QueryFilterFieldValue" შერჩევა=""შეჩერებულია""/> <XSL:with-param სახელი="TotalItems" შერჩევა="$totalStalled"></XSL:with-param> </XSL:ზარის template> <XSL:ზარის template სახელი="ShowBar"> <XSL:with-param სახელი="BarDisplayLabel" შერჩევა=""მიმდინარეობს '"/> <XSL:with-param სახელი="BarPercent" შერჩევა="$percentInProcess"/> <XSL:with-param სახელი="QueryFilterFieldName" შერჩევა=""სტატუსი""/> <XSL:with-param სახელი="QueryFilterFieldValue" შერჩევა=""მიმდინარეობს '"/> <XSL:with-param სახელი="TotalItems" შერჩევა="$totalInProcess"></XSL:with-param> </XSL:ზარის template> </მაგიდა> </td> </tr> </მაგიდა> </XSL:წინააღმდეგ შემთხვევაში> </XSL:აირჩიოს> </XSL:template> <!-- ეს თარგი აკეთებს მუშაობის ჩვენებისას ინდივიდუალური ხაზები ბარი გრაფაში. თქვენ ალბათ ყველაზე თქვენი tweaking აქ. --> <XSL:template სახელი="ShowBar"> <XSL:შეჩერება სახელი="BarDisplayLabel" /> <!-- ეტიკეტების რათა ნახოთ --> <XSL:შეჩერება სახელი="BarPercent"/> <!-- პროცენტი. --> <XSL:შეჩერება სახელი="QueryFilterFieldName"/> <!-- გამოიყენება გადასვლა შეკითხვის & გავფილტროთ --> <XSL:შეჩერება სახელი="QueryFilterFieldValue"/> <!-- გამოიყენება გადასვლა შეკითხვის & გავფილტროთ --> <XSL:შეჩერება სახელი="TotalItems" /> <!-- საერთო რაოდენობა ამ barlabel --> <tr> <!-- ბარი ეტიკეტების თავად. --> <td კლასი="ms-formbody" სიგანე="30%"> <!-- ეს მომდევნო კომპლექტი განცხადებები აშენებს მოთხოვნის სტრიქონი, რომელიც საშუალებას აძლევს           . ჩვენ გამოიყენოს რამდენიმე რამ აქ: 1. ჩვენ შეგვიძლია გაივლის FilterField1 და FilterValue1 to სია, რათა გავფილტროთ წლის სვეტი. 2. SharePoint გადის გასაღები პარამეტრების ჩვენთვის, ListUrlDir that points to the underlying list against which this DVWP is "running". არ არის XSL fun? --> <XSL:ტექსტი გაუქმდება და გამოშვების-აფარებს="დიახ"> <![CDATA[<ტექნიკური კონფერენცია"]]></XSL:ტექსტი> <XSL:ღირებულების შესახებ შერჩევა="$ListUrlDir"/> <XSL:ტექსტი გაუქმდება და გამოშვების-აფარებს="დიახ"><![CDATA[?FilterField1 =]]></XSL:ტექსტი> <XSL:ღირებულების შესახებ შერჩევა="$QueryFilterFieldName"/> <XSL:ტექსტი გაუქმდება და გამოშვების-აფარებს="დიახ"><![CDATA[&FilterValue1 =]]></XSL:ტექსტი> <XSL:ღირებულების შესახებ შერჩევა="$QueryFilterFieldValue"/> <XSL:ტექსტი გაუქმდება და გამოშვების-აფარებს="დიახ"><![CDATA[">]]></XSL:ტექსტი> <XSL:ღირებულების შესახებ შერჩევა="$BarDisplayLabel"/> <XSL:ტექსტი გაუქმდება და გამოშვების-აფარებს="დიახ"><![CDATA[</a>]]></XSL:ტექსტი> <!-- მომდევნო ცოტა ერთგვარი ნომრები ფორმატში: "(სულ / % მთლიანი)" --> (<XSL:ღირებულების შესახებ შერჩევა="$TotalItems"/> / <!-- ეს ქმნის ლამაზი პროცენტის წარწერა ჩვენთვის. მადლობა, Microsoft! --> <XSL:ზარის template სახელი="percentformat"> <XSL:with-param სახელი="პროცენტი" შერჩევა="$BarPercent"/> </XSL:ზარის template>) </td> <!-- და ბოლოს, გადასცემს <td> tag for ბარი თავად.--> <td> <მაგიდა cellpadding="0" cellspacing="0" სასაზღვრო="0" სიგანე="{გარშემო($BarPercent * 100)+1}%"> <tr bgcolor="წითელი"> <XSL:ტექსტი გაუქმდება და გამოშვების-აფარებს="დიახ"><![CDATA[&nbsp;]]></XSL:ტექსტი> </tr> </მაგიდა> </td> </tr> </XSL:template> <!-- ეს არის აღებული უშუალოდ ზოგიერთი XSL I ნაპოვნი MS template. --> <XSL:template სახელი="percentformat"> <XSL:შეჩერება სახელი="პროცენტი"/> <XSL:აირჩიოს> <XSL:როდესაც ტესტი="ფორმატი ნომერი($პროცენტი, "# # # 0%;-#,##0%')= 'NaN "">0%</XSL:როდესაც> <XSL:წინააღმდეგ შემთხვევაში> <XSL:ღირებულების შესახებ შერჩევა="ფორმატი ნომერი($პროცენტი, "# # # 0%;-#,##0%')" /> </XSL:წინააღმდეგ შემთხვევაში> </XSL:აირჩიოს> </XSL:template> </XSL:სტილების>

შედეგები:

XSL ზემოდან წარმოშობს ამ გრაფაში:

იმიჯი

საბურღი ქვემოთ ძირითადი მონაცემები დაჭერით სტატუსი კოდი:

იმიჯი

დასკვნითი ფიქრები:

შეიძლება თუ არა ეს იყოს გენერალიზებული?

მე მიყვარს ეს graphing კონცეფცია, but I hate the fact that I have to go in and do so much hand-coding. I’ve given a little thought to whether it can be generalized and I’m optimistic, but I’m also a little fearful that there may be a brick wall somewhere along the path that won’t offer any work-around. If anyone has some good ideas on this, გთხოვთ აღინიშნა კომენტარი ან მომაწოდეთ.

ვერტიკალური გრაფიკის:

This is a horizontal bar graph. It’s certainly possible to create a vertical graph. We just need to change the HTML. I would start the same way: Create an HTML representation of a vertical bar graph and then figure out how to get that via XSL. If anyone is interested in that, I could be persuaded to try it out and work out the kinks. If someone has already done that, please let me know and I’ll gladly link to your blog 🙂

მე ვფიქრობ, რომ პრობლემას ვერტიკალური გრაფაში არის, რომ ეტიკეტები გრაფაში უფრო ძნელი მართვა, მაგრამ რა თქმა უნდა არა შეუძლებელი.

საველე სახელი GOTCHA ნახვა:

არსებობს მინიმუმ ორი რამ მოსაძებნად გარეთ თქვენი საველე სახელები.

პირველი, a field name with a space has to be escaped in the XSL. This will probably be an issue here:

        <XSL:ცვლადი სახელი="totalProposed" 
შერჩევა="ითვლიან(/dsQueryResponse / რიგები / სკანდალი[ნორმალიზება სივრცე(@ სტატუსი) = 'ინიციატივით გამოდის "])" />

If your "Status" column is actually named "Status Code" then you need to reference it as "Status_x0020_Code":

   <XSL:ცვლადი სახელი="totalProposed" 
შერჩევა="ითვლიან(/dsQueryResponse / რიგები / სკანდალი[ნორმალიზება სივრცე(@ Status_x0020_Code) = 'ინიციატივით გამოდის "])" />

მეორე, და მე ცოტა საეჭვო ამ, but you also need to be on the alert for field name changes. If you name your field "Status Code" და შემდეგ მოგვიანებით, rename it to "AFE Status", the "internal name" does not change. The internal name will still be "Status Code" and must be referenced as "Status_x0020_Code". The "other resources" კავშირები შეიძლება დაეხმაროს დიაგნოსტიკა და შეასწორეთ სახის პრობლემა.

შესახებ, რომ ფერი:

I picked "red" because it’s pleasing to me at the moment. It would not be a big deal to show different colors so as to provide more than just a visual description of a number, but to also provide a useful KPI. მაგალითად, if the percentage of "stalled" AFE-ის არის > 10% შემდეგ აჩვენებს, წითელი, otherwise show it in black. გამოყენება <XSL:აირჩიოს> მიზნის მისაღწევად.

სხვა რესურსები:

ბედნიერი ტრანსფორმირების!

<ბოლოს />

გამოწერა ჩემი დღიური!

SharePoint არ იძლევა “ვის ძებნა” ანგარიშები

განახლების 01/28/08: ეს codeplex პროექტის მიმართავს ამ საკითხზე: http://www.codeplex.com/AccessChecker. I have not used it, მაგრამ გამოიყურება პერსპექტიული თუ ეს საკითხი თქვენ უნდა მიმართოს თქვენს გარემოს.

განახლების 11/13/08: ჯოელ Oleson წერდა up ძალიან კარგი პოსტი, რომელიც დიდი უსაფრთხოების მართვის საკითხი აქ: http://www.sharepointjoel.com / სიების / წერილები / Post.aspx?2D4fc2 2D183c% 2D8320%%% სიაში = 0cd1a63d 2Dba5369008acb&ID = 113. It links to a number of other useful resources.

ფორუმის წევრებს და კლიენტებს ხშირად კითხვა ერთად ამ ხაზები: "როგორ გენერირება სიას მომხმარებლების ხელმისაწვდომობის საიტი" ან "როგორ ავტომატურად პირთა ყველა მომხმარებლების შესვლა სიაში შესახებ ცვლილებების ჩამონათვალი?"

There is no out of the box solution for this. If you think about it for a moment, ეს არ არის ძნელი მესმის, რატომ.

SharePoint security is very flexible. There are at least four major categories of users:

  • დამალული წევრი.
  • SharePoint წევრები და ჯგუფები.
  • Active Directory წევრებს.
  • ადგენს დაფუძნებული ავთენტიფიკაცია (FBA) მომხმარებელი.

მოქნილობა იმას ნიშნავს, რომ უსაფრთხოების პერსპექტივა, any given SharePoint site will be dramatically different from another. In order to generate an access list report, ერთი უნდა დადგინდეს, თუ როგორ საიტი არის დაცული, query multiple different user profile repositories and then present it in a useful fashion. That’s a hard problem to solve generically.

როგორ ხდება ორგანიზაციების საქმე ამ? I’d love to hear from you in comments or ელ.

</ბოლო>

პროგრამები Tags: ,

Moss მეუბნება ჩემი column ის სახელია დაცულია ან გამოყენების … მაგრამ ეს არ

განახლების 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"). სადღაც ხაზის გასწვრივ, 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, თუმცა, remained but in the "_Hidden" group. If someone knows better, please let me know via ელ 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. თუმცა, 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 ანდრია ვუდვორდს 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, მაგრამ მკაფიოდ ინსტრუმენტი მიმღები პირები არ მაქვს პრობლემა გათვალისწინებით, როდესაც მათ შექმნეს UI :). Most people seem to be investing a fair amount of time and effort in creating workstation / კლიენტს განაცხადების რომელიც უზრუნველყოფს ხე views, 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 სიმბოლო Custom მოქმედება — სადამკვირვებლო შესახებ <საველე ჰალსტუხს დიზაინერი ტიპი =”StringBuilder” … />

უბრალოდ სწრაფი დაკვირვების რომ არის ძალიან მნიშვნელოვანი განსხვავება ამ ორ განმარტებები:

<FieldBind საველე = "InParam1" დიზაინერი ტიპი = "სიმებიანი აღმაშენებელი" Id = "2" ტექსტი = "შეყვანის პარამეტრი # 1" />

წინააღმდეგ:

<FieldBind საველე = "InParam1" Id = "2" ტექსტი = "შეყვანის პარამეტრი # 1" />

პირველი გადაცემების მსგავსი SPD:

იმიჯი

ხოლო ეს უკანასკნელი აჩვენებს, ასე:

იმიჯი

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 და სამუშაო პროცესის მონაცემები (მეშვეობით "დამატება Lookup" ღილაკს ქვედა მარცხენა კუთხეში). როდესაც თქვენ იყენებთ Add Lookup ღილაკს, ეს ჩანართები ნიშნად სახით "[%ნიშნად%]". როდესაც SharePoint აღვიძებს თქვენი საბაჟო აქცია, (C # კოდი ჩემს შემთხვევაში), SharePoint გადის ნიშნად თავად, არ ღირებულება ნიშნად. თუ თქვენ იყენებთ ძირითადად დიზაინერი ტიპი (მეორე ტიპის), SharePoint აფართოებს ნიშნად და გადის ფაქტობრივი ღირებულება ნიშნად თქვენს აქცია.

StringBuilder = BAD, სტანდარტულ დიზაინერი ივერიის GOOD.

რა თქმა უნდა, ეს არ არის ის, რაც მე ნამდვილად ნიშნავს. უბრალოდ არ ცდილობენ და გაივლის პარამეტრი თქვენი საბაჟო ქმედება, როდესაც დიზაინერი type = StringBuilder. გამოიყენეთ ძირითადად დიზაინერი ტიპის და ჯაჭვის StringBuilder მას up წინ თუ თქვენ უნდა ავაშენოთ კომპლექსი strings თქვენი workflow (რაც სხვათა შორის, სწორედ ის ერთი ჯერ, რომ შევქმნათ დინამიური საგანი ელ აქცია, მაგრამ ეს საგანი კიდევ წაკითხვა შესვლის, აქვს).

<ბოლოს />

პროგრამები Tags: , ,

ნაადრევი სამუშაოს გააქტიურება — არასამთავრობო სამედიცინო გადაჭრა

განახლების: აგრეთვე ამ MSDN დისკუსია, განსაკუთრებით ბოლო ჩანაწერში: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. It describes a condition that may short circuit this whole thing. In short, ეს შეიძლება იყოს ძალიან მარტივი მიღების მინიმუმ ერთი სფეროებში სავალდებულო.

მე მაქვს დოკუმენტი, ბიბლიოთეკა, რომელიც მხარს უჭერს რვა შინაარსი ტიპის.

I have a SharePoint Designer workflow that wants to calculate and assign a "reminder date" უბრალოდ subtracting 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 და უფრო არსებითი საბურღი-down აქ).

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. ასე რომ, … ჩემი workflow უკვე გაათავისუფლეს და როდესაც ის შესრულებული, 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