Monatliche Archive: Juni 2009

InfoPath-Formular Sevices, Formularbasierte Authentifizierung (FBA) und eindeutige Dateinamen

Ich habe einige InfoPath-Formulare diese Woche in MOSS in einer FBA-Umgebung arbeiten und gelernt, als ich zum Bereitstellen ging die Formen in einer Produktionsumgebung mit einer FBA zone, die den Benutzernamen() Funktion-Funktion funktioniert nicht. Ich benutzte es zum Generieren eindeutiger Dateinamen.

Gut, Diese Funktion funktioniert nicht in einer FBA-Umgebung (mindestens, nicht Out of the box). Und, bei der Reflexion, mit Username in der Weise, die ich geplant hatte einen eindeutigen Dateinamen und würde nicht in jedem Fall gewährleisten.

Meine Lösung war, das jetzt zu nutzen() Funktion und eine Regel, die beim Laden des Formulars ausgelöst wird. Ich zuweisen den Dateinamen Datenelement, wenn es leer ist:

image

image

Der Vorteil dieses Ansatzes ist, dass der Dateiname nur einmal festgelegt ist. (Ich nicht mehr es in der Bildschirmabbildung anzeigen, aber eine Bedingung auf die Regel nur ausgelöst, wenn "MyFilename" leer ist). Früher habe ich den Dateinamen auf der Ebene der Datenquelle festlegen. In der Regel, Ich würde etwas tun (schlecht) So:

image

Das Problem mit diesem ist, dass wenn Benutzer A öffnet das Formular am Montag und der Benutzer B ändert es am Dienstag, Sie werden mit zwei verschiedenen Formen Ende seit zwei verschiedene Benutzer mit unterschiedlichen Benutzernamen speichern.

Also, als ärgerlich FBA im allgemeinen und mit InfoPath vor allem sein kann, Es hat mich ein kleines, aber wirklich wichtige technische Detail und Ansatz, den ich sonst getan würde nicht zu überdenken!

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Technorati Tags:

Sichern von SharePoint Liste/Dokument Bibliothek Ansichten scheint (Art der) Möglich mit jQuery

Dies ist ein weiterer Beitrag in meinem laufenden Serie zur Verwendung jQuery mit SharePoint.
Wenn Sie, erfahren Sie mehr über jQuery möchten, Ich empfehle: jQuery in Action von Bear Bibeault und Yehuda Katz.

Eines der ersten Dinge, die ich dachte, Sobald ich begann zu spielen um mit jQuery, war, ob wir ihn nutzen könne, um eine SharePoint-Ansicht zu sichern. Die Antwort lautet "Nein" (oder zumindest, Ich behaupte nicht, dass es möglich). Jedoch, Es ist sicherlich möglich, Menschen zu sehen, eine bestimmte Ansicht erschweren.

Ich begann mit meiner Sandbox-Umgebung bei der Arbeit an dieser. Ich schrieb über diese Umgebung hier: Schnell und einfach: Erstellen Sie Ihre eigenen jQuery Sandbox für SharePoint.

Um "eine Ansicht zu sichern", gehen Sie folgendermaßen vor:

  1. Erstellen einer Ansicht, die Sie sichern möchten.. Ich tat das und nannte es "View gesichert".

    Dies ist, wie es aussieht, wenn es nicht "gesichert":

    image

  2. Die Ansicht-Seite unter Verwendung des Tricks in der Sandbox-Artikel beschrieben fügen Sie ein Inhalts-Editor-Webpart hinzu (dh. Fügen Sie "PageView = Shared&ToolPaneView = 2 "an die URL).
  3. Ihre SharePoint-_spUserId verrückt folgendermaßen herausfinden, glauben oder nicht:
    1. Loggen Sie sich in Ihrer SharePoint-Umgebung.
    2. In den Webbrowser-Adressfeld, Typ: "javascript:Warnung(_spUserId").
    3. Das Rekordergebnis (Es ist in meinem Fall "13").

      image

  4. Das folgende Javascript zu Ihren CEWP in der Codeansicht hinzufügen:

    <Skript-Typ ="Text/javascript"
        Src ="../../jQuery Library/jQuery-1.3.2.Min.js">
    </Skript>
    
    <Skript-Typ ="Text/javascript">
      $(Funktion() {
    
        Warnung(_spUserId);
    
        var TheSecuredView = $("Iframe[FilterLink * = gesicherte % 20View]');
    
        If ((theSecuredView.length > 0) && (_spUserId == 13))
          $("Iframe[FilterLink * = gesicherte % 20View]').Eltern().Eltern().Eltern().HTML("<TR Bgcolor = rot><TD>Keinen Blick für Sie!</TD></TR>");
      });
    
    </Skript>
    

Ich habe diese Warnung enthalten.(_spUserId) Linie drin zu demonstrieren, wie dies ist nicht wirklich ein "schützen" einen Blick, aber einfach machen es schwierig, zu sehen. Mehr dazu in Kürze.

Im Grunde, jQuery ist ein iFrame auf der Seite gesucht, die ein Attribut, die verfügt "Secured % 20View" in seinem Wert enthält. Sobald er es gefunden hat, Wir überprüfen, um festzustellen, ob der aktuelle Benutzer ist "13". Wenn es ist, Wir gehen den DOM zu einem <TR> Tag (die ich durch die Anzeige von Quellcode und verfolgen es herausgefunden) und dann das TR-Tag durch meine Nachricht ersetzen. Ich weiß nicht wirklich, wie robust das ist (Ich bin sehr misstrauisch, Tatsächlich), aber es funktionierte in meinem Sandkasten. Wenn ich einen besseren Weg finden, Ich werde darüber blog. Dies ist das Ergebnis:

image

Ich klicke auf die Schaltfläche OK und die Daten mit einer großen roten Meldung ersetzt:

image

Wie Sie sagen, der Weg ich habe implementieren ist diese "Sicherheit"-Lösung, das Webpart selbst rendern lassen. Nach Abschluss, Überschreiben Sie seinen Inhalt, mit meiner "keine Sicht für Sie!"Nachricht.

Trotz der Tatsache, dass es nicht wirklich eine "gesicherte" "anzeigen, Es ist potentiell nützlich und einige clevere Arbeit, Es kann schließlich sicherungsfähige Element in einem formalen Sinn sein. Das Grundproblem ist, dass der Client die Daten erhält und dann, erst, nachdem es die Daten abruft, Sie wischt es raus. Wenn der Client die Daten abrufen, ist, ein clever Benutzer kann verhindern, dass die jQuery läuft auf allen und sehen, was er sehen will.

Gibt es andere Nachteile. Diese "Sicherheit"-Ansatz basiert auf einer _spUserId. Wünschen wir uns wirklich sicher auf der Grundlage des vollen SharePoint-Sicherheitsmodells, oder zumindest nach Benutzername. Das wird immer schwieriger, aber ich sehe einige gute Sachen geschrieben zu diesem Thema, Also habe ich die Hoffnung, dass es ist eine gute Antwort auf dieses problem.

Die Liste der Ansichten sich eingekürzt werden sollten, Wenn möglich. Ich habe nicht versucht, das herauszufinden. Ich gehe davon aus, dass es möglich, aber wirklich das grundlegenden Sicherheitsproblem lösen nicht, weil jemand immer noch nur die URL der Ansicht geben könnte, was sie wollen (Wenn sie es wüssten). Jedoch, Trimmen ist sinnvoll. Es ist eine gute Usability-Funktion und es hilft, um Dinge zu verschleiern.. Wenn ein Endbenutzer nicht weiß, dass das Ereignis Ansicht vorhanden ist, Sie werden nicht wahrscheinlich versuchen, es zu benutzen. Manchmal, Das ist gut genug.

Mit etwas Glück, Mehr zu diesem Thema im Laufe der Zeit zu schreiben werde ich haben..

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Schnell und einfach: A Better Way to Use jQuery ein Textfeld auf einem SharePoint-Formular ausblenden

Dies ist ein weiterer Beitrag in meinem laufenden Serie zur Verwendung jQuery mit SharePoint.
Wenn Sie, erfahren Sie mehr über jQuery möchten, Ich empfehle: jQuery in Action von Bear Bibeault und Yehuda Katz.

Zuvor, Ich schrieb darüber, wie mithilfe von jQuery zu suchen und ein Textfeld in einem Formular ausblenden. Ich kümmerte mich nicht für den spezifischen Ansatz (Ich war Verkettung Eltern – das einfach nicht in diesen Tagen erledigt, zumindest in den Familien von Qualität).

Als ich anfing, darüber nachzudenken, Ich wusste, ich musste finden eine <TR> zu dem konnte ich das Ausblenden aufgerufen.() Methode. Meine frühen Bemühungen, den richtigen zu finden <TR> war so etwas wie dieses:

$(' tr:hat(Eingang[Titel = mich ausblenden!])');

Das Problem mit diesem ist, dass sie würde jeden <TR> Tag, die übergeordnete Beziehung zum Ausblenden mir hatte! Feld, auch wenn mich ausblenden! ist tief in vielen Ebenen geschachtelt <TR>ist. Es stellt sich heraus, dass mein Sandkasten-Formular, Dieser Ausdruck findet 9 verschiedene TR, die haben ausblenden mich! als Kind irgendwo in der DOM-Struktur. Ich erkannte, dass ich wieder auf den Baum aus dem Eingabefeld selbst laufen konnte, Das ist also, wie ich sich einschmeicheln rauf missbrauchen Eltern, aber es nicht gut mit mir sitzen.

Ich habe einige Gedanken dazu und eines der Dinge, die ich endlich gelesen sinnvoll: Ich konnte das nicht verwenden.() aus trim-Methode <TR>ist, dass ich in meinem umschlossenen Satz will nicht. Das führte mich zu diesem:

$(' tr:hat(Eingang[Titel = mich ausblenden!])').nicht(' tr:hat(TR)').Ausblenden();

Das erste Bit findet alle die <TR> Tags, die das Fell mich haben! Feld überall in ihre eigene Hierarchie. Es dann Streifen keines <TR> die haben auch ein Kind <TR>. Dies lässt uns mit einem einzigen <TR> ,:

1) Hat keine <TR> untergeordnete Datensätze

2) Verfügt über das Eingabefeld als Kind.

Wir können dann das Ausblenden anwenden.() Methode, um die daraus resultierende gesetzt und wir sind fertig.

Ich bin immer noch ein bisschen nervös, aber nicht so nervös als Verkettung von Eltern.

Ich weiß nicht, ob dies eine bewährte Methode ist. Möglicherweise gibt es ein geeigneterer Weg identifizieren nur die <TR> dass wir kümmern uns um ein SharePoint-Formular. Wenn Sie wissen, Bitte post a comment.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Schnell und einfach: Verwenden Sie jQuery, um ein Textfeld in einem SharePoint-Formular ausblenden

Dies ist ein weiterer Beitrag in meinem laufenden Serie zur Verwendung jQuery mit SharePoint.
Wenn Sie, erfahren Sie mehr über jQuery möchten, Ich empfehle: jQuery in Action von Bear Bibeault und Yehuda Katz.

UPDATE (bereits!): Ich glaube, einen besseren Weg zu finden die <TR> Tag ich ausblenden möchten und schrieb über ihn hier. Sie noch interessante dieser Artikel sowieso so bin ich Leavnig es.

Ich möchte ein Textfeld ausblenden, "Mich verstecken!"wie gezeigt:

image

Die folgende jQuery funktioniert der Trick für mich:

<Skript-Typ ="Text/javascript">

  $(Funktion() {


    $(' Eingabe[Titel = mich ausblenden!]').Eltern().Eltern().Eltern().Ausblenden();

  });

</Skript>

Der Code ist zu sagen, "Find mich alle Eingaben Felder, deren Titel = mich ausblenden!. Dann, erhalten seine Eltern und dann weiter übergeordneten und die * weiter * übergeordnete (Puh!) und rufen Sie das Ausblenden() Das Ding-Methode, Was auch immer es passiert zu sein.

Ich fand heraus, dass übergeordnete Struktur durch Anzeigen der HTML-Code für das Formular, das SharePoint erstellt, wie gezeigt:

<TR>
    <TD NoWrap= "true" valign= "top" Breite= "190px" Klasse= "ms-Formlabel">
        <H3 Klasse= "ms-Standardheader">
            <nobr>Mir ausblenden!</nobr>
        </H3>
    </TD>

    <TD valign= "top" Klasse= "ms-formbody" Breite= "400px">
        <!-- FieldName = "mich ausblenden!"
                 FieldInternalName = "Hide_x0020_Me_x0021_"
                 FieldType = "SPFieldText"
        -->
        <Spannweite dir= "none">
            <Eingang
                Name= "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= "Mich ausblenden!"
                Klasse= "ms-lang" />
                <BR>
        </Spannweite>


    </TD>
</TR>

Dieses Bild zeigt das gleiche, markiert, aber mit den Eltern:

image

Das erste übergeordnete (1) ist ein Span-tag. Spannweite des übergeordneten (2) TD-Tag ist und dann bekommen wir endlich den tatsächlichen Eltern verbergen möchte (3) Das ist das TR-Tag selbst.

Dies ist ein ziemlich schrecklich Ansatz, denke ich, denn es ist extrem abhängig von der besonderen Struktur dieses Formulars. Wenn SharePoint 2010 kommt, Diese ganze Struktur könnte ändern und brechen diesen Ansatz. Was ich wirklich tun möchte ist Handwerk ein jQuery-Selector, ist nach dem Vorbild der "mir der TR finden (und nur TR-tags) die haben irgendwo in ihre untergeordneten Elemente ein Eingabefeld mit dem Titel = mich ausblenden!”. Ich von unten ab und bewegt sich. Vorausgesetzt ich dies herausfinden, Ich werde eine aktualisierte "schnelle und einfache ' post.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Schnell und einfach: Erstellen Sie Ihre eigenen jQuery Sandbox für SharePoint

Dies ist ein weiterer Beitrag in meinem laufenden Serie zur Verwendung jQuery mit SharePoint.
Wenn Sie, erfahren Sie mehr über jQuery möchten, Ich empfehle: jQuery in Action von Bear Bibeault und Yehuda Katz.

Erste Schritte mit jQuery in SharePoint ist überraschend einfach (Für mich). (Ich habe ernste Fragen über einen "best practices" Ansatz zur Bereitstellung von diesen Dingen zu Produktion, aber das ist für einen anderen Tag). Ich habe gerade angefangen mit dieser Technologie und in diesem Zusammenhang spielen, Ich habe eine Sandbox-Umgebung verwenden. Wenn Sie schauen, um die ersten Schritte mit jQuery, Sie können dieser Ansatz nützlich finden.

1. Erstellen einer leeren Website

Erstellen einer leeren Website irgendwo auf Ihrer Website und rufen Sie es etwas wie "jQuery Sandbox" clever.

2. JQuery herunterladen

Sie können die Javascript-Bibliothek jQuery von hier herunterladen.: http://docs.jquery.com/Downloading_jQuery

Speichern Sie, um auf Ihrem desktop.

Ich habe gewesen benutze die "minimierte" version.

3. Erstellen einer SharePoint-Dokumentbibliothek

In der Sandbox-Website, Erstellen einer Dokumentbibliothek.

4. Die jQuery-Bibliothek in SharePoint hochladen

Zugriff auf die Doc-Bibliothek, die Sie gerade erstellt haben und hochladen die jQuery-Bibliothek.

5. Erstellen einer benutzerdefinierten SharePoint-Liste

Ich habe mit einer benutzerdefinierten Liste angefangen, weil ich mit SharePoint Standardformulare Dreck zu wollen. Sie könnten auch eine Seite in einer Bibliothek für Seiten oder Webpartseiten und wahrscheinlich viele andere Orte erstellen..

Fügen Sie einige Spalten der benutzerdefinierten Liste hinzu, damit Sie etwas zu jQuery gegen ausgeführt haben. Meine ersten Ziele waren:

  1. Ausblenden eines Feldes.
  2. Ein Feld einen Wert zuweisen.

Mit diesem Ziel vor Augen, Ich habe zwei Textfelder. Im Laufe der Zeit, Ich werde mit Links spielen, Bilder, Suchen, usw..

6. Ändern der Webpartseite NewForm.aspx und Hinzufügen eines Inhalts-Editor-Webparts

Dies ist ein wenig schwarz magic-ish , Es ist ein neues Konzept für mich. Lernte ich über das von Paul Grenier, SharePoint jQuery Superstar, auf seiner Website CodePlex-Projekt: http://spff.codeplex.com/.

Gehen Sie folgendermaßen vor um eine CEWP auf der gleichen Seite hinzufügen, die für jede benutzerdefinierte Liste NewForm.aspx zeigt:

  1. Zugriff auf die benutzerdefinierte Liste, und klicken Sie auf neu.
  2. Folgendes an die URL anfügen: Seitenzugriff = freigegeben&ToolPaneView = 2

Das wird Ihr langweilig Vanille Dateneingabeformular aus etwas verwandeln:

image

Dazu:

image

Fügen Sie das Inhalts-Editor-Webpart auf der Seite.

7. Schreiben Sie Ihre erste jQuery Code

Öffnen Sie die CEWP in der Codeansicht und fügen Sie folgende:

image

Hier ist der eigentliche Code, wenn Sie, kopieren und einfügen möchten:

<Skript-Typ ="Text/javascript"
    Src ="../../jQuery Library/jQuery-1.3.2.Min.js">
</Skript>

<Skript-Typ ="Text/javascript">
  $(Funktion() {

    $('#resultsID').HTML("Es gibt" + $('a').Größe() + "ein Tags Tags auf dieser Seite.");

  });
</Skript>

Ergebnis:
<Div Id ='ResultsID'></div>
/Ergebnis

Beachten Sie, dass die erste <Skript> Tag ist die tatsächliche jQuery-Bibliothek verweisen.. Vermutlich, Diese Dinge ändern im Laufe der Zeit, so Sie sicherstellen, dass Sie möchten eine) Verwenden Sie den richtigen Namen und b) zeigen Sie es auf die richtige SharePoint-Dokumentbibliothek.

Im Ruhm Sonnen

Wenn Sie alles richtig gemacht haben, Sie sehen ein Ergebnis ähnlich der folgenden:

image

Nachbereitung

Dies ist nicht der einzige Weg um zu beginnen, aber es ist schnell, leicht und isoliert von der vorhandenen SharePoint-Umgebung.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Schnell und einfach: Verwenden Sie jQuery Set A Text Field-Wert in einem SharePoint-Formular

Ich begann mit Herumspielen jQuery Gestern. Ich wollte schon seit langem dazu, seit Paul Grenier begann zu schreiben seine Serie über jQuery für Endbenutzer bei der ehrwürdigen www.endusersharepoint.com Web-site. Wie ich es verwenden, Ich hoffe, eine Reihe von "Quick und Easy" wie dieses posts hinzufügen. Dieser Beitrag beschreibt das bekannte Text den Wert eines Felds festgelegt gewünschte.

In diesem Szenario, Ich habe eine benutzerdefinierte Liste erstellt, deren "neue" Form sieht wie gezeigt:

image

Dies ist das neue Formular für eine benutzerdefinierte Liste mit der Standardspalte-Titel und zwei Listenspalten der (nicht Websitespalten; Ich glaube nicht, dass es keinen Unterschied machen sollte).

Ziel ist es, dem Feld einen beliebigen Wert zuweisen, "DefaultMeFieldNoSpaces" (Sie können sagen, ich bin ein bisschen wie ein Feigling mit der "Leerzeichen", was los, aber ich es am Ende dieses Artikels aufpeppen).

Dieses Bit von jQuery arbeitete für mich:

<Skript-Typ ="Text/javascript">

  $(Funktion() {

    $(' Eingabe[Titel = DefaultMeFieldNoSpaces]').attr(
        {Wert: "Sie sind in einem kurvenreichen Labyrinth von Passagen, alle gleich. "});

  });

</Skript>

Wie ich es dieses Bit von jQuery verstehe ist zu sagen, "finde mich jeder Eingabe tag deren Titel = DefaultMeFieldNoSpaces. Dann, Legen Sie alle ihre Werte an einen berühmten Satz aus einem alten Computerspiel."

Da es nur ein Feld im Formular mit einem Titel "DefaultMeFieldNoSpaces" gleich noch sind wir gesicherte für dieses Feld einen Wert zuweisen und keine andere.

Was ist ein Feld, dessen Name Leerzeichen enthält? Es ist fast das gleiche:

<Skript-Typ ="Text/javascript">

  $(Funktion() {
     $(' Eingabe[Titel = Feld mit Speicherplatz zuweisen]').attr(
        {Wert: "Sie sind in einem kurvenreichen Labyrinth von Passagen, alle gleich. "});

  });

</Skript>

Ich denke, dass dies eine ziemlich sichere Ansatz ist, Was bedeutet, dass wir in der Lage, das Feld, das wir wollen und nur das Feld zu finden sein sollten, möchten wir. Schauen Sie sich gibt die HTML-SharePoint uns, Es ist irgendwie chaotisch:

<Eingang
Name= "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"
Klasse= "ms-lang"
/>

"Titel" sticht als erkennbar und hoffentlich einmaligen Attribut helfen uns die spezifische Spalte identifizieren, die wir unsere willkürlichen Wert zuweisen möchten.

Dies ist eine grundlegende Konzept. Festlegen eines Feldes in einen beliebigen Weg, wie dies geht nicht, um welche Auszeichnungen gewinnen. Jedoch, Wenn wir wollen, interessanter Form Ebene Dinge zu tun (alle von uns immer tun wollen, Natürlich, direkt nach dem Ende der Abwasch), wie ändern Sie den Wert von "Feld b" automatisch basierend auf dem Wert von "Feld ein", Wir (ICH) müssen Sie diese Dinge zu lernen.

Ich denke, dass ist unsere beste Chance, um einen echten Nutzwert hier über den Titel, zumindest für Textfelder. Möglicherweise gibt es eine bessere, zuverlässiger Ansatz. Wenn ich es finde, Ich werde diesen Beitrag aktualisieren.. Wenn Sie einen besseren Weg wissen, Bitte einen Kommentar.</Ende>

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin