当前位置: 首页 > 知识库问答 >
问题:

Alfresco中的自定义表单新建用户错误

阴福
2023-03-14

如何创建自定义用户配置文件?我想在Alfresco中为用户添加一个新字段...我尝试使用这个:http://ecmarchitect.com/archives/2012/02/27/1555,代码:http://ecmarchitect.com/images/articles/alfresco-people/someco-people.zip...

重要代码:

SignUserFactory.java

package com.someco.share;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Map;

import org.alfresco.web.site.SlingshotUserFactory;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.extensions.surf.FrameworkUtil;
import org.springframework.extensions.surf.RequestContext;
import org.springframework.extensions.surf.exception.ConnectorServiceException;
import org.springframework.extensions.surf.exception.UserFactoryException;
import org.springframework.extensions.surf.site.AlfrescoUser;
import org.springframework.extensions.surf.support.ThreadLocalRequestContext;
import org.springframework.extensions.surf.util.StringBuilderWriter;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.connector.Connector;
import org.springframework.extensions.webscripts.connector.ConnectorContext;
import org.springframework.extensions.webscripts.connector.HttpMethod;
import org.springframework.extensions.webscripts.connector.Response;
import org.springframework.extensions.webscripts.json.JSONWriter;

public class SomeCoUserFactory extends SlingshotUserFactory {

    public static final String SCP_BIRTH_DATE = "{http://www.someco.com/model/people/1.0}birthDate";
    public static String SCP_SHIRT_SIZE = "{http://www.someco.com/model/people/1.0}shirtSize"; 
    public static String SCP_SIGNIFICANT_OTHER = "{http://www.someco.com/model/people/1.0}significantOther";
    public static String SCP_LIKES_NEIL_DIAMOND = "{http://www.someco.com/model/people/1.0}likesNeilDiamond";
    public static String PROP_SCP_BIRTH_DATE = "birthDate";
    public static String PROP_SCP_SHIRT_SIZE = "shirtSize";
    public static String PROP_SCP_SIGNIFICANT_OTHER = "significantOther";
    public static String PROP_SCP_LIKES_NEIL_DIAMOND = "likesNeilDiamond";


    @Override
    protected AlfrescoUser constructUser(JSONObject properties, Map<String, Boolean> capabilities,
            Map<String, Boolean> immutability) throws JSONException {
        AlfrescoUser user = super.constructUser(properties, capabilities, immutability);
        user.setProperty(PROP_SCP_BIRTH_DATE, properties.has(SCP_BIRTH_DATE) ? properties.getString(SCP_BIRTH_DATE) : null);
        user.setProperty(PROP_SCP_SHIRT_SIZE, properties.has(SCP_SHIRT_SIZE) ? properties.getString(SCP_SHIRT_SIZE) : null);
        user.setProperty(PROP_SCP_SIGNIFICANT_OTHER, properties.has(SCP_SIGNIFICANT_OTHER) ? properties.getString(SCP_SIGNIFICANT_OTHER) : null);
        user.setProperty(PROP_SCP_LIKES_NEIL_DIAMOND, properties.has(SCP_LIKES_NEIL_DIAMOND) ? properties.getString(SCP_LIKES_NEIL_DIAMOND) : null);
        return user;
    }

    @Override
    public void saveUser(AlfrescoUser user) throws UserFactoryException {
        RequestContext context = (RequestContext)ThreadLocalRequestContext.getRequestContext();
        if (!context.getUserId().equals(user.getId())) {
            throw new UserFactoryException("Unable to persist user with different Id that current Id.");
        }

        StringBuilderWriter buf = new StringBuilderWriter(512);
        JSONWriter writer = new JSONWriter(buf);

        try {
            writer.startObject();

            writer.writeValue("username", user.getId());

            writer.startValue("properties");
            writer.startObject();
            writer.writeValue(CM_FIRSTNAME, user.getFirstName());
            writer.writeValue(CM_LASTNAME, user.getLastName());
            writer.writeValue(CM_JOBTITLE, user.getJobTitle());
            writer.writeValue(CM_ORGANIZATION, user.getOrganization());
            writer.writeValue(CM_LOCATION, user.getLocation());
            writer.writeValue(CM_EMAIL, user.getEmail());
            writer.writeValue(CM_TELEPHONE, user.getTelephone());
            writer.writeValue(CM_MOBILE, user.getMobilePhone());
            writer.writeValue(CM_SKYPE, user.getSkype());
            writer.writeValue(CM_INSTANTMSG, user.getInstantMsg());
            writer.writeValue(CM_GOOGLEUSERNAME, user.getGoogleUsername());
            writer.writeValue(CM_COMPANYADDRESS1, user.getCompanyAddress1());
            writer.writeValue(CM_COMPANYADDRESS2, user.getCompanyAddress2());
            writer.writeValue(CM_COMPANYADDRESS3, user.getCompanyAddress3());
            writer.writeValue(CM_COMPANYPOSTCODE, user.getCompanyPostcode());
            writer.writeValue(CM_COMPANYFAX, user.getCompanyFax());
            writer.writeValue(CM_COMPANYEMAIL, user.getCompanyEmail());
            writer.writeValue(CM_COMPANYTELEPHONE, user.getCompanyTelephone());

            // START SomeCo Specific properties
            writer.writeValue(SCP_BIRTH_DATE, user.getStringProperty(PROP_SCP_BIRTH_DATE));
            writer.writeValue(SCP_SHIRT_SIZE, user.getStringProperty(PROP_SCP_SHIRT_SIZE));
            writer.writeValue(SCP_SIGNIFICANT_OTHER, user.getStringProperty(PROP_SCP_SIGNIFICANT_OTHER));
            writer.writeValue(SCP_LIKES_NEIL_DIAMOND, user.getStringProperty(PROP_SCP_LIKES_NEIL_DIAMOND));
            // END SomeCo Specific properties

            writer.endObject();
        writer.endValue();

        writer.startValue("content");
        writer.startObject();
        writer.writeValue(CM_PERSONDESCRIPTION, user.getBiography());
        writer.endObject();
        writer.endValue();

        writer.endObject();

        Connector conn = FrameworkUtil.getConnector(context, ALFRESCO_ENDPOINT_ID);
        ConnectorContext c = new ConnectorContext(HttpMethod.POST);
        c.setContentType("application/json");
        Response res = conn.call("/slingshot/profile/userprofile", c,
                new ByteArrayInputStream(buf.toString().getBytes()));
        if (Status.STATUS_OK != res.getStatus().getCode()) {
            throw new UserFactoryException("Remote error during User save: " + res.getStatus().getMessage());
        }
    } catch (IOException ioErr) {
        throw new UserFactoryException("IO error during User save: " + ioErr.getMessage(), ioErr);
    } catch (ConnectorServiceException cse) {
        throw new UserFactoryException("Configuration error during User save: " + cse.getMessage(), cse);
    }
    }
}

share-config-custom.xml

<config evaluator="string-compare" condition="WebFramework" replace="true">
    <web-framework>
        <defaults>
            <user-factory>webframework.factory.user.someco</user-factory>
        </defaults>
    </web-framework>
</config>
      <bean id="webscripts.resources" class="org.springframework.extensions.surf.util.ResourceBundleBootstrapComponent">
      <property name="resourceBundles">
         <list>
            <value>webscripts.messages.webscripts</value>
            <value>alfresco.messages.common</value>
            <value>alfresco.messages.slingshot</value>
            <value>alfresco.web-extension.messages.somecoPeople</value>
         </list>
      </property>
   </bean>

   <bean id="webframework.factory.user.someco" class="com.someco.share.SomeCoUserFactory" parent="webframework.factory.base" />

当我尝试在Alfresco中进行登录时,它给我这个错误:

有人能帮我吗?也许当我将它添加到我的多合一扩展中时,文件夹是不正确的。我需要帮忙!

我用的是露天社区5

共有1个答案

蒋芷阳
2023-03-14

Jeff Potts的教程是针对Alfresco3.4.d的,它不能直接用于Alfresco5。

抛出的错误似乎是由于您没有部署内容模型,即教程中引用的scpeopleModel.xml。

我已经使用Alfresco SDK2.2将上面的教程转换为Alfresco 5.1,这个项目就在这里

此项目中的主要更改是省略了文件userprofile.get.head.ftl,原因是.head.ftl WebScript文件现在已不推荐用于呈现共享组件的WebScript。现在通过使用main.html.ftl文件中的@script和@link标记来加载依赖项。

因此,出于上述原因,您可能会在userprofile.get.html.ftl中找到下面的代码部分

<@markup id="css" >
   <#-- CSS Dependencies -->
   <@link href="${url.context}/res/components/profile/profile.css" group="profile"/>
</@>

<@markup id="js">
   <#-- JavaScript Dependencies -->
   <@script src="${url.context}/res/components/profile/profile.js" group="profile"/>
   <@script src="${url.context}/res/modules/simple-dialog.js" group="profile"/>
   <@script src="${url.context}/res/components/profile/sc-profile.js" group="profile"/>
</@>
 类似资料:
  • 问题内容: 我可以看到使用表单时如何向字段添加错误消息,但是模型表单呢? 这是我的测试模型: 我的模型表格: 在字段中的错误信息:和是: 这是必填栏 如何以模型形式进行更改? 问题答案: 对于简单的情况,你可以指定自定义错误消息

  • 功能介绍 获取本APP的新用户自定义留存报告相关数据 接口 https://openapi.baidu.com/rest/2.0/mtj/svc/app/getDataByKey 请求参数 此处仅列本接口特有参数,公共参数请参考报告级API说明 获取表格数据 参数名 参数类型 是否必须 描述 method string 是 retaineduser/a flag string 是 newcust

  • 我使用open cmis在Alfresco存储库(5.1e)中创建带有附件的文件夹(自定义类型)。文件夹创建成功,但对于将文档(cmis:document-cm:content)创建为附件,我得到以下异常: 下面是将文档添加到文件夹的源代码(方法):

  • 我正在用PHP制作一个CMS,希望用户能够创建自定义表单字段,用于他们的网站注册(类似于SocialEngine或PHPFox)。然而,我真的没有一个好主意,我将如何实现这一点。我需要做一些插件(“钩子”)系统吗?我最初是这么想的,但我不知道这是否真的是一个好方法: CMS管理员将获得一个表单,其中包含他们想要创建的表单字段名称、字段类型(字符串、布尔值、日期等)、字段类别以及是否为必填字段等选项

  • 主要内容:自定义复选框,Bootstrap4 实例,自定义单选框,Bootstrap4 实例,自定义控件显示在同一行,Bootstrap4 实例,自定义选择菜单,Bootstrap4 实例,Bootstrap4 实例,自定义滑块控件,Bootstrap4 实例,自定义文件上传控件,Bootstrap4 实例Bootstrap4 可以自定义一些表单的样式来替换浏览器默认的样式。 自定义复选框 如果要自定义一个复选框,可以设置 <div> 为父元素,类为 .custom-control 和 .cus

  • 问题内容: 我正在尝试更新Alfresco中的文件…,然后执行以下代码: 变量是把该文件(的变化,我对文件进行更新以base64文件)的内容,但也许这是不正确的格式?是的文件,如参考:和是对: 参数来源 我得到了错误: POST http:// localhost:8080 / share / proxy / alfresco / api / upload 500内部服务器错误 javax.ser