2010-10-08 13 views
1

Je dois modifier la valeur dans un champ SP Rich Text via le contrôle de navigateur Web WinForms. La plupart des autres contrôles (tags d'entrée) sont faciles à obtenir et nous pouvons changer la valeur tout simplement. Cependant, pas si simple avec Rich Text. Je me suis dirigé vers: http://blog.drisgill.com/2007_05_01_archive.htmlDonnées d'entrée vers le contrôle RichText SharePoint Par WinForms WebBrowser Control

et j'ai eu quelques idées. Au début, j'ai essayé creatign une fonction javascript et l'ajouter à la page:

function GetRichTextRange(strBaseElementID) 
    var docEditor=RTE_GetEditorDocument(strBaseElementID); 
    if (docEditor == null) 
    { return; } 
    var selection = docEditor.selection; 
    var range = selection.createRange(); 
    return range; 
} 

Cependant, chaque fois que j'appelle cela, je reçois toujours une valeur null retour. J'ai donc essayé ceci:

object docEditor = document.InvokeScript("RTE_GetEditorDocument", new object[] { fieldName }); 
IHTMLDocument2 doc = (IHTMLDocument2)docEditor; 
IHTMLSelectionObject selection = doc.selection; 
IHTMLTxtRange textRange = (IHTMLTxtRange)selection.createRange(); 
textRange.pasteHTML(value); 

Eh bien, maintenant, je reçois une erreur sur la deuxième ligne: « Impossible de jeter l'objet de type 'System.DBNull' taper « mshtml.IHTMLDocument2"

I Je ne suis même pas sûr que je transtype le bon type d'objet de toute façon, mais en tout cas, il semble que ce que je reçois de la fonction RTE_GetEditorDocument est de System.DBNull.

Tout ce que je veux faire est de dire quelque chose comme myRichTextHtmlElement.SetAttribute ("value", html); mais cela ne peut évidemment pas être fait.

Pour empirer les choses, je suis complètement nouveau pour javascript et je suis plus d'un mec WinForms, donc mon HTML n'est pas exactement chaud. Ci-dessous le code HTML de mon champ RichText:

<tr> 
    <td nowrap="true" valign="top" width="190px" class="ms-formlabel"> 
    <h3 class="ms-standardheader"> 
     <nobr>RichText</nobr> 
    </h3> 
    </td> 
    <td valign="top" class="ms-formbody"> 
    <!-- FieldName="RichText" 
      FieldInternalName="RichText" 
      FieldType="SPFieldNote" 
      --> 
    <span dir="none"> 
     <div class='ms-rtestate-field ms-rtefield' style=''> 
     <div id='ctl00_m_g_29d60052_5630_4981_8452_850a87a50b56_ctl00_ctl05_ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_TextField_inplacerte_label' 
      style='display:none'>Rich text editor 
     </div> 
     <div class=' ms-rtestate-write ms-rteflags-0' 
      id='ctl00_m_g_29d60052_5630_4981_8452_850a87a50b56_ctl00_ctl05_ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_TextField_inplacerte' 
      style='min-height:84px' 
      aria-labelledby='ctl00_m_g_29d60052_5630_4981_8452_850a87a50b56_ctl00_ctl05_ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_TextField_inplacerte_label' 
      contentEditable='true' > 
      <div class="ExternalClassD74B4D64D01941CDB34619757AAA30D8"> 
      <html> 
       <body> 
       <h4>A Definition List:</h4> 
       <dl> 
        <dt>Coffee</dt> 
        <dd>Black hot drink</dd> 
        <dt>Milk</dt> 
        <dd>White cold drink</dd> 
       </dl> 
       </body> 
      </html> 
      </div> 
     </div> 
     <div style="clear:both;"></div> 
     </div> 
     <span dir="ltr"> 
     <input name="ctl00$m$g_29d60052_5630_4981_8452_850a87a50b56$ctl00$ctl05$ctl07$ctl00$ctl00$ctl04$ctl00$ctl00$TextField_spSave" 
       type="HIDDEN" 
       id="ctl00_m_g_29d60052_5630_4981_8452_850a87a50b56_ctl00_ctl05_ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_TextField_spSave" /> 
     </span> 
    </span> 
    </td> 
</tr> 

Vous avez des idées? Merci!

+0

Une autre chose qui vient de me traverser l'esprit; Je présume que "strBaseElementID" est le nom du champ SP. Dans ce cas, je passe le nom "RichText" qui est le nom de mon champ RichText de test. Est-ce même ce que je suis censé transmettre ou autre chose? Le nom semble un peu étrange et j'ai essayé de passer aussi l'attribut HtmlElement.ID en vain ...: -s – Matt

Répondre

0

est-ce que vous devez utiliser un contrôle winchs webbrowser? Vous pouvez utiliser n'importe quel éditeur de code html souhaité dans une winform et capturer les résultats et utiliser les services Web sharepoint ou le modèle objet (en fonction du cas d'utilisation) pour mettre à jour l'élément en tant qu'option alternative.

0

Eh bien, après avoir tiré beaucoup de cheveux, j'ai eu la réponse et c'était plus simple que je ne le pensais. Une fois que je suis arrivé le HtmlElement correct (div avec id « ..... TextField_inplacerte »), alors tout ce que je devais faire était le suivant:

HtmlElement element = document.GetRichTextFieldCell(fieldName); 

if (element != null) 
{ 
    element.InnerHtml = value; 
    element.SetAttribute("value", value); 
} 

Je ne ai pas besoin probablement le peu de SetAttribute, alors je vais essayer la même chose plus tard sans cette ligne.

Merci quand même les gars. :-)