Månadsarkiv: Juni 2009

InfoPath-formuläret tjänster, Formulärbaserad autentisering (FBA) och unika filnamn

Jag har varit arbetande på vissa InfoPath-formulär i veckan i MOSS i FBA miljö och lärde, När jag gick för att distribuera formulären till en produktionsmiljö med en FBA zon som användarnamn() funktionen funktion fungerar inte. Jag använde det för att generera unika filnamn.

Brunn, denna funktion fungerar inte i ett FBA-miljö (minst, inte ur lådan). Och, vid närmare eftertanke, med användarnamn på det sätt som jag hade planerat skulle inte har garanterat ett unikt filnamn som helst.

Min lösning var att använda nu() funktion och en regel som bränder på lastning av form. Jag tilldela sedan filnamnet till dataelement när den är tom:

image

image

Fördelen med denna metod är att filnamnet anges endast en gång. (Jag Visa inte det i skärmbilden, men sätta ett villkor på regeln att endast eld när "myFilename" är tom). Jag används för att ange namnet på data source nivå. Normalt, Jag skulle göra något (Dålig) Gillar det här:

image

Problemet med det är att om användare A öppnar formuläret på måndag och användaren B ändrar det på tisdag, du ska sluta med två olika former eftersom två olika användare sparas det med olika användarnamn.

Så, som irriterande som FBA kan i allmänhet och med InfoPath i synnerhet, Det fick mig att tänka en liten men mycket viktig teknisk detalj och strategi som jag inte skulle ha gjort annars!

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Technorati Tags:

Skydda SharePoint lista/bibliotek dokumentvyer verkar (typ av) Möjligt med jQuery

Detta är en annan post i min pågående serie om hur du använder jQuery med SharePoint.
Om du vill veta mer om jQuery, Jag rekommenderar: jQuery i aktion av Björn Bibeault och Yehuda Katz.

En av de första saker som jag trodde, När jag började att spela med jQuery, var om vi kunde använda den för att säkra en SharePoint-vy. Svaret är "nej" (eller åtminstone, Jag påstår inte att det är möjligt). Men, Det är säkert möjligt att göra det svårt för människor att se en viss vy.

Jag började med min sandlåda miljö när du arbetar på detta. Jag skrev om att miljön här: Snabb och enkel: Skapa din egen jQuery sandlåda för SharePoint.

Att "säkra" en Visa, Följ dessa steg:

  1. Skapa en vy som du vill skydda. Jag gjorde det och kallade det "Säkrade View".

    Detta är vad det ser ut när det inte är "säker":

    image

  2. Lägga till webbdelen Innehållsredigeraren till vyn sida använda knep beskrivs i artikel i sandlådan (dvs. Lägg till "sidvisning = delad&ToolPaneView = 2 "till URL).
  3. Räkna ut din SharePoint _spUserId crazy sÃ, tro eller ej:
    1. Logga in på din SharePoint-miljö.
    2. I webbläsarens Adress-fält, typ: "javascript:Alert(_spUserId").
    3. Spela in resultatet (Det är "13" i mitt fall).

      image

  4. Lägg till följande javascript till din CEWP i kodvyn:

    <script typ ="text/javascript"
        src =".. /.. /jQuery Library/jQuery-1.3.2.min.js">
    </skript>
    
    <script typ ="text/javascript">
      $(funktionen() {
    
        Alert(_spUserId);
    
        var theSecuredView = $("iframe[FilterLink * = säkrade % 20View]');
    
        om ((theSecuredView.length > 0) && (_spUserId == 13))
          $("iframe[FilterLink * = säkrade % 20View]').förälder().förälder().förälder().HTML("<TR bgcolor = röd><TD>Ingen utsikt för dig!</TD></TR>");
      });
    
    </skript>
    

Jag har tagit det alert(_spUserId) linje in där för att visa hur detta inte verkligen en "säkra" en Visa, men helt enkelt göra det svårare att se. Mer om det i ett ögonblick.

I princip, jQuery är ute efter en iFrame på sidan som har ett attribut som innehåller "Secured % 20View" i dess värde. När den finner det, Vi kontrollerar för att se om den aktuella användaren är "13". Om det är, Vi vandrar upp DOM till en <TR> tag (som jag räknat ut genom att Visa källa och spåra det) och sedan ersätta den TR-taggen med mitt budskap. Jag vet faktiskt inte hur robust är (Jag är väldigt misstänksam, I själva verket), utom den arbetat i min sandlåda. Om jag hittar ett bättre sätt, Jag ska blogga om det.. Detta är resultatet:

image

Jag klickar på OK och data ersätts med en stor röd meddelande:

image

Som du kan berätta, det sättet jag genomföra denna "säkerhet" lösning är att låta webbdelen som göra sig. Efter den är klar, Jag skriva över dess innehåll med min "ingen vy för dig!"meddelande.

Trots att det inte är verkligen en "säkrade" "Visa, Det är potentiellt användbara och med några smart arbete, Det kan så småningom komma securable i en mer formell mening. Den grundläggande frågan är att klienten blir alla data och sedan, först när det blir data, det torkar det. Om klienten är att få uppgifter, en smart användare kan förhindra jQuery körs på alla och se vad han/hon vill se.

Det finns andra nackdelar. Denna "säkerhet" tillvägagångssätt bygger bort en _spUserId. Vi vill att riktigt säkert baserat på SharePoint-säkerhetsmodellen i full, eller åtminstone av användarnamn. Det blir successivt svårare, men jag ser några bra saker skrivna om detta ämne, så jag hoppas det är ett bra svar på det problemet.

Listan över vyer sig putsas, om möjligt. Jag har inte försökt att räkna ut. Jag antar att det är möjligt, men inte riktigt lösa de grundläggande säkerhetsproblem eftersom någon kunde fortfarande bara Skriv Webbadressen till vyn de vill (om de visste det). Men, trimning är meningsfullt. Det är en bra användbarhet funktion och bidrar till att fördunkla saker. Om en användare inte vet att Visa evenemanget finns, de inte kommer att förmodligen försöka använda den. Ibland, Det är bra nog.

Med lite tur, Jag har mer att skriva om detta ämne med tiden.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Ett bättre sätt att använda jQuery att dölja ett textfält i ett SharePoint-formulär

Detta är en annan post i min pågående serie om hur du använder jQuery med SharePoint.
Om du vill veta mer om jQuery, Jag rekommenderar: jQuery i aktion av Björn Bibeault och Yehuda Katz.

Tidigare, Jag skrev om hur du använder jQuery att lokalisera och dölja ett textfält i ett formulär. Jag brydde mig för det specifika tillvägagångssättet (Jag kedja föräldrar – det är helt enkelt inte gjort dessa dagar, åtminstone i familjer med kvalitet).

När jag först började att tänka på det, Jag visste att jag behövde till finna en <TR> som jag kunde åberopa Dölj() metoden. Min tidiga försök att hitta rätt <TR> var ungefär så här:

$("tr:har(input[titel = gömma mig!])');

Problemet med det är att det skulle finna varje <TR> tag som hade någon överordnad relation till gömma mig! fältet, även om gömma mig! är kapslade många nivåer djupt i <TR>'s. Det visar sig att min sandlåda formuläret, Detta uttryck finner 9 olika TR som har gömma mig! som ett barn någonstans i sin DOM-trädet. Jag insåg att jag kunde gå tillbaka upp trädet från fältet sig, så det är hur jag hamnade missbrukar föräldrar, men det sitta inte bra med mig.

Jag gav en tanke till detta och en av de saker jag läser slutligen är meningsfullt: Jag kunde använda inte() metoden att trimma ut <TR>: s jag inte vill ha i min inslagna som. Som ledde mig till detta:

$("tr:har(input[titel = gömma mig!])').inte("tr:har(TR)').Dölj();

Den första biten hittar alla de <TR> Taggar som har gömma mig! fältet var som helst i deras egen hierarki. Det sedan remsor ut någon <TR> Det har också ett barn <TR>. Detta lämnar oss med en enda <TR> som:

1) Har ingen <TR> underordnade poster

2) Har fältet som barn.

Vi kan sedan använda Dölj() metod att den resulterande och vi är klar.

Jag är fortfarande lite nervös om detta, men inte lika nervös som kedja föräldrar.

Jag vet inte om detta är en bästa praxis eller inte. Det kan vara ett mer lämpligt sätt att identifiera just den <TR> att vi bryr oss om i en SharePoint form. Om du vet, Vänligen skriv en kommentar.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Använda jQuery för att dölja ett textfält i ett SharePoint-formulär

Detta är en annan post i min pågående serie om hur du använder jQuery med SharePoint.
Om du vill veta mer om jQuery, Jag rekommenderar: jQuery i aktion av Björn Bibeault och Yehuda Katz.

UPPDATERING (redan!): Jag tänkte på ett bättre sätt att hitta den <TR> tag jag vill dölja och skrev om det här. Du kan fortfarande finna denna artikel intressant hur som helst så är jag leavnig upp.

Jag vill dölja ett textfält, "Dölj mig!"som visas:

image

Följande jQuery gör susen för mig:

<script typ ="text/javascript">

  $(funktionen() {


    $("ingång[titel = gömma mig!]').förälder().förälder().förälder().Dölj();

  });

</skript>

Koden säger, "hitta mig alla ingående fält vars titel = gömma mig!. Sedan, få sina överordnade och bredvid överordnade och * nästa * förälder (Puh!) och åberopa Dölj() metod på det där, vad det råkar vara.

Jag beräknat ute den överordnade strukturen genom att visa HTML-koden för formuläret som SharePoint skapats som visas:

<TR>
    <TD nowrap= true" nederkant= "top" bredd= "190px" klass= "ms-formlabel">
        <H3 klass= "ms-standardheader">
            <nobr>Gömma mig!</nobr>
        </H3>
    </TD>

    <TD nederkant= "top" klass= "ms-formbody" bredd= "400 pixlar">
        <!-- Fältnamn = "Dölj mig!"
                 FieldInternalName = "Hide_x0020_Me_x0021_"
                 FieldType = "SPFieldText"
        -->
        <Spänn dir= "ingen">
            <input
                Namn= "ctl00$ m$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
                typ= "text"
                MaxLength= "255"
                ID= "ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
                titel= "Dölj mig!"
                klass= "ms-lång" />
                <br>
        </Spänn>


    </TD>
</TR>

Denna bild visar samma, men märkt upp med föräldrar:

image

Den första föräldern (1) är en span-tagg. Spans överordnade (2) är en TD-tagg och sedan slutligen vi kommer till verkligt förälder jag vill dölja (3) vilket är TR-taggen själv.

Detta är ett ganska hemska tillvägagångssätt eftersom det är extremt beroende av mycket specifika strukturen av denna form. När SharePoint 2010 kommer ut, hela denna struktur skulle kunna ändra och bryta detta tillvägagångssätt. Vad jag verkligen vill göra är hantverk en jQuery väljare som är i linje med "hitta mig alla TR (och enda TR-Taggar) som har någonstans i deras underordnade element ett inmatningsfält vars titel = gömma mig!”. Jag börjar från botten och flytta. Förutsatt att jag lista ut, Jag kommer lägga upp en uppdaterad "snabb och enkel" post.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

del.icio.us Taggar: ,

Snabb och enkel: Skapa din egen jQuery sandlåda för SharePoint

Detta är en annan post i min pågående serie om hur du använder jQuery med SharePoint.
Om du vill veta mer om jQuery, Jag rekommenderar: jQuery i aktion av Björn Bibeault och Yehuda Katz.

Det är förvånansvärt enkelt att komma igång med jQuery i SharePoint (Till mig). (Jag har allvarliga frågor om en "best practices" metod att distribuera dessa saker till produktion, men det är för en annan dag). Jag har precis börjat spela med denna teknik och därför, Jag skapade en sandlåda miljö att använda. Om du vill komma igång med jQuery, Du kan hitta detta tillvägagångssätt användbara.

1. Skapa en tom webbplats

Skapa en tom webbplats någonstans i din webbplats och kallar det något smart som "jQuery Sandbox".

2. Hämta jQuery

Du kan hämta den jQuery javascript biblioteket här: http://docs.jquery.com/Downloading_jQuery

Spara det till på skrivbordet.

Jag har blitt användande den "minified" versionen.

3. Skapa ett SharePoint-dokumentbibliotek

I din sandlåda webbplats, skapa ett dokumentbibliotek.

4. Ladda jQuery biblioteket till SharePoint

Åt doc biblioteket du just skapade och ladda jQuery biblioteket.

5. Skapa en anpassad SharePoint-lista

Jag har börjat med en anpassad lista eftersom jag vill slänga med SharePoint standardformulären. Du kan också skapa en sida i ett bibliotek för sidor eller webbdelssidor och förmodligen en massa andra ställen.

Lägga till vissa kolumner i listan anpassad så att du har något att köra jQuery mot. Min ursprungliga mål var att:

  1. Dölja ett fält.
  2. Tilldela ett värde till ett fält.

Med detta mål i åtanke, Jag la två textfält. Över tid, Jag ska spela med länkar, bilder, uppslag, m.m..

6. Ändra webbdelssidan NewForm.aspx och lägga till webbdelen Innehållsredigeraren

Detta är en liten svart magic-ish , att det är ett nytt koncept för mig. Jag lärde mig först om detta från Paul Grenier, SharePoint jQuery Superstar, på hans CodePlex project-webbplats: http://spff.codeplex.com/.

Följ dessa steg för att lägga till en CEWP på samma sida som visar NewForm.aspx för någon anpassad lista:

  1. Få tillgång till den anpassade listan och klicka på ny.
  2. Lägga till följande URL:: Sidvisning = delade&ToolPaneView = 2

Som kommer att förvandla din tråkiga vanilj datainmatningsformulär från något sådant:

image

Till detta:

image

Lägga till webbdelen Innehållsredigeraren på sidan.

7. Skriva din första jQuery kod

Öppna det CEWP i kodvyn och lägga till följande:

image

Här är den faktiska koden om du vill klistra in:

<script typ ="text/javascript"
    src =".. /.. /jQuery Library/jQuery-1.3.2.min.js">
</skript>

<script typ ="text/javascript">
  $(funktionen() {

    $("#resultsID").HTML("Det finns" + $("a").storlek() + "en Taggar Taggar på denna sida.");

  });
</skript>

Resultat:
<DIV id ="resultsID"></div>
/resultat

Observera att först <skript> tag refererar till faktiska jQuery biblioteket. Förmodligen, dessa saker förändras över tiden, så ska du se till att du en) använda den rätt namn och b) Peka på korrekt SharePoint-dokumentbiblioteket.

Sola sig i glansen

Om du gjorde det rätt, du ser ett resultat som liknar följande:

image

Inslagning

Detta är inte det enda sättet att komma igång, men det är snabbt, lätt och isolerade från befintliga SharePoint-miljön.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

del.icio.us Taggar: ,

Snabb och enkel: Använda jQuery att ange en Text fältets värde på en SharePoint-Form

Jag började spela med jQuery Igår. Jag har velat göra detta länge, ända sedan Paul Grenier började skriva hans serie om jQuery för slutanvändare på den ärevördiga www.endusersharepoint.com webbplats. Eftersom jag använder den, Jag hoppas att lägga till en serie "Snabb och lätt" inlägg som den här. Det här inlägget beskriver hur du anger en känd text fältvärdet till vad du vill.

I det här scenariot, Jag har skapat en anpassad lista vars "nya" form ser ut som visas:

image

Detta är den nya formen för en anpassad lista med kolumnen standard och två listkolumner (inte webbplatskolumner; Jag tror inte att det skulle göra någon skillnad).

Målet är att tilldela ett godtyckligt värde i fältet, "DefaultMeFieldNoSpaces" (Du kan berätta jag är lite feg med "inga blanksteg" sak händer, men jag krydda upp det i slutet av denna artikel).

Denna bit av jQuery fungerade för mig:

<script typ ="text/javascript">

  $(funktionen() {

    $("ingång[titel = DefaultMeFieldNoSpaces]').attr(
        {värde: "Du är en krånglig labyrint av gångar, alla lika. "});

  });

</skript>

Som jag förstår det denna bit av jQuery säger, "hitta mig någon input tag vars titel = DefaultMeFieldNoSpaces. Sedan, Ställ alla deras värden på en berömd fras från en gammal datorspel".

Eftersom det endast blir ett fält i formuläret med en titel lika med "DefaultMeFieldNoSpaces" är vi försäkrade för att tilldela ett värde till fältet och ingen annan.

Vad sägs om ett fält vars namn innehåller blanksteg? Det är nästan samma:

<script typ ="text/javascript">

  $(funktionen() {
     $("ingång[titel = tilldela fält med utrymme]').attr(
        {värde: "Du är en krånglig labyrint av gångar, alla lika. "});

  });

</skript>

Jag tror att detta är ett ganska säkert tillvägagångssätt, vilket innebär att vi kan hitta det fält som vi vill och bara fältet vill vi. Om man tittar på ger HTML-SharePoint oss, Det är slags rörigt:

<input
Namn= "ctl00$ m$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
typ= "text"
MaxLength= "255"
ID= "ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
titel= "DefaultMeFieldNoSpaces"
klass= "ms-lång"
/>

"titel" står ut som en igenkännlig och förhoppningsvis unika attribut till hjälpa oss att identifiera särskilda kolumnen som vi vill tilldela våra godtyckligt värde.

Detta är ett grundläggande begrepp. Anger ett fält på ett godtyckligt sätt som denna kommer inte att vinna några priser. Men, om vi vill göra mer intressant form nivå saker (som vi alla alltid vill göra, Självklart, direkt efter vi avslutar diska), som ändra värdet för "fältet b" automatiskt baserat på värdet av "fältet en", Vi (JAG) behöver lära sig dessa saker.

Jag tror att vår bästa chans att få ett riktigt användbart värde här är via titeln, åtminstone för textfält. Det kan finnas en bättre, mer tillförlitlig metod. Om jag tycker att det, Jag kommer uppdatera detta inlägg. Om du vet ett bättre sätt, lämna gärna en kommentar.</slutet>

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin