zoukankan      html  css  js  c++  java
  • Liferay应用程序模板如何获取自定义结构的字段值

    参考:http://www.huqiwen.com/2016/03/28/get-struct-custom-field-in-adt-template/

    在Liferay中有时候我们希望通过在其他系统中或者远程发布网页内容,此时就需要使用Liferay提供的webservice接口,可能会碰到如下的问题:

    1、发布后的内容是草稿状态;

    2、发布后的内容不能在Asset Publisher里面看到;

    3、发布时后台有时候会报错;

    所有的问题归结起来就是没有传入正确的参数,主要是ServiceContext。核心代码如下:

     JournalArticleServiceSoapService articleLocator = new JournalArticleServiceSoapServiceLocator();
     ServiceContext serviceContext = new ServiceContext();
    
     JournalArticleServiceSoap articleService = articleLocator
     .getPortlet_Journal_JournalArticleService(APIUtil
     .getPortalURL("Portlet_Journal_JournalArticleService"));
    
     
     
     String[] titleLanguageIds = {"zh_CN"};
     String[] titleValue = {"新闻测试42"};
     String[] desLanguageIds = {"zh_CN"};
     String[] desValue = {"这是内容的描述2"};
     
     String content = buildContent("新闻内容");
     
     String type="general";
     
     serviceContext.setWorkflowAction(1);
     serviceContext.setScopeGroupId(20181);
     serviceContext.setIndexingEnabled(true);
     
     
     JournalArticleSoap articleSoap = articleService.addArticle(20181, 0, 0, 0, "", true,
     titleLanguageIds, titleValue, desLanguageIds, desValue, content, type, "", "", null, 4,
     22, 2016, 8, 10, 0, 0, 0, 0, 0, true, 0, 0, 0, 0, 0, true, true, "",
     serviceContext);
    
     private static String buildContent(String content) {
     String contentStr = "<?xml version='1.0' encoding='UTF-8'?><root available-locales="zh_CN"
     default-locale="zh_CN"><static-content language-id="zh_CN"><![CDATA[|" + content + "]]>
    </static-content></root>";
     return contentStr;

    特别需要注意的就是其中的标红部分,其他的参数可以对照API里面的参数名称进行即可。

    方法体如下:

    addArticle(groupId, folderId, classNameId, classPK, articleId, autoArticleId, titleMapLanguageIds, titleMapValues, descriptionMapLanguageIds, descriptionMapValues, content, type, ddmStructureKey, ddmTemplateKey, layoutUuid, displayDateMonth, displayDateDay, displayDateYear, displayDateHour, displayDateMinute, expirationDateMonth, expirationDateDay, expirationDateYear, expirationDateHour, expirationDateMinute, neverExpire, reviewDateMonth, reviewDateDay, reviewDateYear, reviewDateHour, reviewDateMinute, neverReview, indexable, articleURL, serviceContext)

    参数说明:

    groupId:站点ID,需要将内容发布在哪个站点;

    folderId:此网页内容所属的文件夹,默认填0,如果需要指定文件夹,传入对应的ID;

    classNameId:journalArticle类的classNameId,添加时为0;

    classPk:类的主键,添加时为0;

    articleId:String类型,默认为空;

    autoArticleId:是否自动创建articleId,我们使用true,默认创建;

    titleMapLanguageIds:标题的语言ID,参考上面的代码,是一个语言id的数组,如中文、英文等;

    titleMapValues:标题的语言对应的内容,参考上面的代码,是一个String数组;

    descriptionMapLanguageIds:描述的语言ID,参考上面的代码,String数组;

    descriptionMapValues:描述对应的值,参考上面的代码,String数组;

    content:正文,这里是一个XML的值,里面存的为对应结构的内容。

    type:网页内容的类型,默认用general即可。

    ddmStructureKey:结构的ID,如果是基本网页内容传入为0;

    ddmTemplateKey:对应结构的模板ID;

    layoutUuid:显示的目标页面的UUID;

    后面的几个分别是显示日期、过期日期、重新编辑时期的年、月、日、小时、分钟,不再赘述;

    注意:显示日期是必须的,如果是小于当前的时间就是立刻显示的,如果是大于当前的时间,比如设置为三天后显示,则在资源发布器里面,只有三天后才会看到,如果是小于当前的时间是可以立刻看到。

    过期时间、重新编辑时间等类似。

    indexable:是否索引,一般为true;

    articleURL:传入空值即可。

    serviceContext:见上面的代码。

    APIUtil的代码是构建了一个URL,如下:

    private static URL getURL(String serviceName,String project) throws MalformedURLException {
     String url = "http://localhost:8080";
     String email = "test";
     String password = "test";
    
    int pos = url.indexOf("://");
     String protocol = url.substring(0, pos + 3);
     String host = url.substring(pos + 3, url.length());
    
    StringBuilder sb = new StringBuilder();
     sb.append(protocol);
     try {
     sb.append(URLEncoder.encode(email, "UTF-8"));
     } catch (UnsupportedEncodingException e) {
     e.printStackTrace();
     }
     sb.append(":");
     sb.append(password);
     sb.append("@");
     sb.append(host);
     if (null!=project && !"".equals(project)) {
     sb.append("/"+project);
     }
     sb.append("/api/axis/");
     sb.append(serviceName);
     System.out.println(sb.toString());
     return new URL(sb.toString());
     }
  • 相关阅读:
    Linux服务器在SSH客户端如何实现免密登录
    在linux服务器下JMeter如何执行jmx性能脚本
    单元测试
    JsonPath如何获取JSON数据中的值
    TestNG Suite 运行出现中文乱码如何解决
    Java如何获取JSON数据中的值
    数组的冒泡排序
    java数组扩容
    null类型不能转换成double基本类
    Java 将目录下的文件移动到指定的目录文件下
  • 原文地址:https://www.cnblogs.com/show58/p/14267470.html
Copyright © 2011-2022 走看看