TableauServerUrls.Url_FinalizeDataSourcePublish C# (CSharp) Method

Url_FinalizeDataSourcePublish() public method

URL to finish publishing a datasource
public Url_FinalizeDataSourcePublish ( TableauServerSignIn, logInInfo, string uploadSession, string datasourceType ) : string
logInInfo TableauServerSignIn,
uploadSession string
datasourceType string
return string
    public string Url_FinalizeDataSourcePublish(TableauServerSignIn logInInfo, string uploadSession, string datasourceType)
    {
        string workingText = _urlFinalizeUploadDatasourceTemplate.Replace("{{iwsSiteId}}", logInInfo.SiteId);
        workingText = workingText.Replace("{{iwsUploadSession}}", uploadSession);
        workingText = workingText.Replace("{{iwsDatasourceType}}", datasourceType);
        ValidateTemplateReplaceComplete(workingText);

        return workingText;
    }

Usage Example

Beispiel #1
0
    /// <summary>
    /// After a file has been uploaded in chunks, we need to make a call to COMMIT the file to server as a published Data Source
    /// </summary>
    /// <param name="uploadSessionId"></param>
    /// <param name="publishedContentName"></param>
    private SiteDatasource FinalizePublish(
        string uploadSessionId,
        string publishedContentName,
        string publishedContentType,
        string projectId,
        CredentialManager.Credential dbCredentials)
    {
        //See definition: http://onlinehelp.tableau.com/current/api/rest_api/en-us/help.htm#REST/rest_api_ref.htm#Publish_Datasource%3FTocPath%3DAPI%2520Reference%7C_____29
        var sb        = new StringBuilder();
        var xmlWriter = XmlWriter.Create(sb, XmlHelper.XmlSettingsForWebRequests);

        xmlWriter.WriteStartElement("tsRequest");
        xmlWriter.WriteStartElement("datasource");
        xmlWriter.WriteAttributeString("name", publishedContentName);

        //If we have an associated database credential, write it out
        if (dbCredentials != null)
        {
            CredentialXmlHelper.WriteCredential(
                xmlWriter,
                dbCredentials);
        }

        xmlWriter.WriteStartElement("project"); //<project>
        xmlWriter.WriteAttributeString("id", projectId);
        xmlWriter.WriteEndElement();            //</project>
        xmlWriter.WriteEndElement();            // </datasource>
        //Currently not supporting <connectionCredentials>
        xmlWriter.WriteEndElement();            // </tsRequest>
        xmlWriter.Close();

        var xmlText = sb.ToString(); //Get the XML text out

        //Generate the MIME message
        var mimeGenerator = new MimeWriterXml(xmlText);

        //Create a web request to push the
        var urlFinalizeUpload = _onlineUrls.Url_FinalizeDataSourcePublish(_onlineSession, uploadSessionId, publishedContentType);

        //NOTE: The publish finalization step can take several minutes, because server needs to unpack the uploaded ZIP and file it away.
        //      For this reason, we pass in a long timeout
        var webRequest = this.CreateAndSendMimeLoggedInRequest(urlFinalizeUpload, "POST", mimeGenerator, TableauServerWebClient.DefaultLongRequestTimeOutMs);
        var xmlDoc     = GetWebReponseLogErrors_AsXmlDoc(webRequest, "finalize datasource publish");

        //Get all the datasource node from the response
        var nsManager     = XmlHelper.CreateTableauXmlNamespaceManager("iwsOnline");
        var dataSourceXml = xmlDoc.SelectSingleNode("//iwsOnline:datasource", nsManager);

        try
        {
            return(new SiteDatasource(dataSourceXml));
        }
        catch (Exception parseXml)
        {
            StatusLog.AddError("Data source upload, error parsing XML response " + parseXml.Message + "\r\n" + dataSourceXml.InnerXml);
            return(null);
        }
    }