URL:er till bilagor i XPages

URL:er till bilagor i XPages

I klassisk Domino-utveckling är URI till en bilaga:

http(s)://[server]/[application.nsf]/[viewname|0]/[UNID| ViewKey]/$File/[AttachmentName]?Open

Den syntaxen fungerar fortfarande bra på webben, men inte i XPages i Notes-klienten.


Den nya syntaxen för att skapa en URI till en bilaga är istället:

http(s)://[server]/[application.nsf]/xsp/.ibmmodres/domino/OpenAttachment/[application.nsf]/[UNID|/$File/[AttachmentName]?Open

Koden nedan (SSJS) är enklaste sättet att skapa URI till en bilaga.

function getAttachmentURL (docID:java.lang.String , attachmentName:java.lang.String) {
    var base = getBaseURL() ;
    var middle = "/xsp/.ibmmodres/domino/OpenAttachment" ;
    if (base.substr(0, 4) == "/xsp"){
        middle += base.substr(4);
    } else {
        middle += base;
    }
    var result = base + middle +"/"+ docID +"/\$File/"+ attachmentName +"?Open";
    return result;
}
 
function getBaseURL ( ) {
    var curURL = context.getUrl();
    var curAdr = curURL.getAddress();
    var rel = curURL. getSiteRelativeAddress(context);
    var step1 = curAdr.substr(0,curAdr.indexOf(rel));
   
    // Now cut off the http
    var step2 = step1.substr(step1.indexOf("//")+ 2);
    var result = step2.substr(step2.indexOf("/"));
    return result;   
}

För att skapa en snygg länk i en ViewContainer kan nedan kodfragment användas.

<xp:viewPanel id="viewPanelReport" viewStyle="width:99%"
  var="viewEntry" rows="60">
  <xp:this.facets>
    <xp:pager partialRefresh="true" layout="Previous Group Next"
      xp:key="headerPager" id="pager1">
    </xp:pager>
  </xp:this.facets>
  <xp:this.data>
    <xp:dominoView var="myView" viewName="myv"></xp:dominoView>
  </xp:this.data>
...
  <xp:viewColumn id="viewColumn2" value="">
    <xp:repeat var="attachment" rows="1">
  	<xp:this.value><![CDATA[#{javascript:try{
	var rtItem:NotesRichTextItem = viewEntry.getDocument().getFirstItem("Body");
     return rtItem.getEmbeddedObjects()
} catch(e){
	//Felhantering
}}]]></xp:this.value>
      <xp:link id="link1" target="_blank">
  		<xp:this.value><![CDATA[#{javascript:var unid = viewEntry.getDocument().getUniversalID();
var attachmentName = attachment.getName();
var uri = getAttachmentURL(unid, attachmentName);
return uri}]]></xp:this.value>
  		<xp:this.text><![CDATA[#{javascript:"Öppna \""+ attachment.getName() +"\""}]]></xp:this.text>
      </xp:link>
    </xp:repeat>
    <xp:viewColumnHeader id="viewColumnHeader2"></xp:viewColumnHeader>
  </xp:viewColumn>
...
</xp:viewPanel>
Tags:
,