3

私は現在、ブラウザとしてFirefoxを使用して、Oracle Linux 664ビット仮想マシンでAlfresco4.0.dコミュニティエディション(Alfresco 4.0.cコミュニティエディションでもこれを試しました)を使用しています。

最近、私は、新しいアイテムがスペース/フォルダーに入るときにサブフォルダーを動的に作成するルールを介して実行できるスクリプトを作成しようとしていました。

基本的に、fileOneという名前の新しく作成されたコンテンツがあるとします。このファイルはmainFolderと呼ばれるスペースに配置され、ファイルに対してルールを実行してスクリプトを実行すると、スクリプトはファイルのタイトルと作成の値に基づいてサブフォルダーが存在するかどうかを確認します。そうでない場合は、そのファイルのタイトル値->サブフォルダー、および作成者値->サブサブフォルダーに基づいて、そのmainFolder内にサブフォルダーが作成されます。次に、そのコンテンツ/ファイルを、既存または新しく作成されたサブサブフォルダーに移動します。

最終的に私は次のようなものが欲しいです:

Space: mainFolder
|---> Content: fileOne --> Properties: Name, Title, Author
|---> Space: Title
      |---> Space: Author
            |---> Content: fileOne --> Properties: Name, Title, Author 

以下はスクリプトです...

function main()
{
    //mainFolder space/folder MUST exist under companyhome.
    var rootSpaceName = companyhome.childByNamePath("mainFolder");

    if(rootSpaceName == null)
    { 
        logger.log("Company Home/mainFolder does not exist, so we have nothing to do.");
        return;
    }
    else
    {
        logger.log("Company Home/mainFolder exists, so carry on our process.");

        var childList = rootSpaceName.children;
        var count = childList.length;
        var seconds = new Date().getTime() / 1000;

        if(count == 0)
        {
            logger.log("Company Home/mainFolder does not have child, nothing to do.");
            return;
        }
        else
        {
            for(var i = 0; i < count; i++)
            {
                // File Title MUST exist.
                var childTitle = childList[i].properties.title;

                if(childTitle == null)
                {
                    childTitle = "New Title " + seconds;
                }

                // File Author MUST exist.
                var childAuthor = childList[i].properties.author;

                if(childAuthor == null)
                {
                    childAuthor = "New Author " + seconds;
                }

                var child = childList[i];
                logger.log("This child is: " + child);

                if(child.isContainer == false)
                {
                    for(var j = 0; j < count; j++)
                    {
                        var newChildName = childList[j].properties.name;
                        logger.log("New child name: " + newChildName);
                        var newChild = childList[j];

                        if((newChild.isContainer == true) && (childTitle == newChildName))
                        {
                            var newSpaceName = rootSpaceName.childByNamePath(newChildName);
                            var newChildList = newSpaceName.children;
                            var newCount = newChildList.length;

                            for(var k = 0; k < newCount; k++)
                            {
                                var newNewChildName = newChildList[k].properties.name;
                                var newNewChildAuthor = newChildList[k].properties.author;
                                var newNewChild = newChildList[k];

                                if((newNewChild.isContainer == true) && (newNewChildAuthor == childAuthor))
                                {
                                    var currentSpace = newSpaceName.childByNamePath(newNewChildName);
                                    child.move(currentSpace);
                                }
                            }
                        }
                        else
                        {
                            // If title folder is already created, not need to create again.
                            var newSpaceName = companyhome.childByNamePath("mainFolder/" + childTitle);

                            if(newSpaceName == null)
                            {
                                newSpaceName = rootSpaceName.createFolder(childTitle);
                                logger.log("mainFolder/" + childTitle + " is created.");
                            }

                            // If author folder is already created, not need to create again.
                            var newNewSpaceName = companyhome.childByNamePath("mainFolder/" + childTitle + "/" + childAuthor);
                            if(newNewSpaceName == null)
                            {
                                newNewSpaceName = newSpaceName.createFolder(childAuthor);
                                logger.log("mainFolder/" + childTitle + "/" + childAuthor + " is created.");
                            }

                            child.move(newNewSpaceName);
                            logger.log("Moving file " + child.properties.name);
                        }

                    }

                }

            }
        }
    }
    return;
}

main();

したがって、これをテストするために、ここで段階的に実行します。

  1. CompanyHomeをクリックします。
  2. [作成] 、 [スペースの作成]をクリックします。
  3. 次に、 mainFolderというスペースを作成します(これはCompany Homeの下にあります)。
  4. 次に、新しく作成したフォルダをクリックし、[その他のアクション] 、[コンテンツルールの管理]の順にクリックします。
  5. 次に、[ルールの作成]をクリックします。
    5a。条件を選択するように指示されたら、[すべてのアイテム]を選択し、[リストに追加]をクリックして、[次へ]をクリックします。

    5b。アクションを選択するように指示されたら、[スクリプトの実行]を選択し、[値の設定と追加]をクリックします。これにより、以前にデータ内のScriptsフォルダーに追加したnew-create-folders.jsというスクリプトを選択できます。辞書次に、[ OK ] 、 [次へ]の順にクリックします。 5c。ここでタイプを尋ねられたら、私は

    アイテムが更新されます。次に、フォルダの作成ルールのようなタイトルを入力します。最後に、バックグラウンドで実行ルールをチェックしてから、[次へ]をクリックします。

    5d。次に、[完了]をクリックしてルールを完成させます。
  6. ルールを作成したら、[作成] 、 [コンテンツの作成]の順にクリックします。 6a。コンテンツにname001のような名前を付け、 [次へ]をクリックしてから、title001のようなタイトルとauthor001のような作成者を入力します。次に、[ OK]をクリックします。

今起こっていることが私を混乱させました。それは私が望むようにtitle001と呼ばれる1つのサブフォルダーを作成し、そのサブフォルダー内にauthor001と呼ばれる別のフォルダーを作成し、そのフォルダー内にname001と呼ばれるファイル移動されました。そして、それは私がそれを機能させたい方法のようなものですが、それでも問題があります。mainFolderの下には、 New Title 1346102873.393 New Title 1346102873.393という新しいサブフォルダーもあり、その中にNew Author 1346102873.393というフォルダーがありますが、そのフォルダー内にファイルはありません。また、 mainFolderにコンテンツを1つだけ追加したときに、このフォルダーが作成される理由がわかりません。?また、フォルダが作成されたので、ルールもmainFolderから削除されたように見えます。つまり、フォルダに適用されたルールはもうありません。そして、mainFolderでルールを再度作成するために戻ると、次のエラーが発生しますFailed to create Rule due to error: null。そして、以下は私がログファイルで得るエラーです...

Alfrescoログからの出力/エラー

17:27:51,373 DEBUG [org.alfresco.repo.jscript.RhinoScriptProcessor] Imports resolved, adding resource '_root
17:27:53,389 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Company Home/mainFolder exists, so carry on our process.
17:27:53,400 DEBUG [org.alfresco.repo.jscript.ScriptLogger] This child is: Node Type: {http://www.alfresco.org/model/content/1.0}systemfolder, Node Aspects: [{http://www.alfresco.org/model/content/1.0}auditable, {http://www.alfresco.org/model/system/1.0}referenceable, {http://www.alfresco.org/model/system/1.0}localized]
17:27:53,400 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,422 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/New Title 1346102873.393 is created.
17:27:53,439 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/New Title 1346102873.393/New Author 1346102873.393 is created.
17:27:53,498 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,499 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: name001
17:27:53,523 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,524 DEBUG [org.alfresco.repo.jscript.ScriptLogger] This child is: Node Type: {http://www.alfresco.org/model/content/1.0}content, Node Aspects: [{http://www.alfresco.org/model/content/1.0}auditable, {http://www.alfresco.org/model/system/1.0}referenceable, {http://www.alfresco.org/model/content/1.0}titled, {http://www.alfresco.org/model/content/1.0}author, {http://www.alfresco.org/model/system/1.0}localized, {http://www.alfresco.org/model/application/1.0}inlineeditable]
17:27:53,524 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,534 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/title001 is created.
17:27:53,546 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/title001/author001 is created.
17:27:53,561 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file name001
17:27:53,561 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: name001
17:27:53,577 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file name001
17:27:53,578 DEBUG [org.alfresco.repo.jscript.RhinoScriptProcessor] Time to execute script: 1976.9988ms
17:31:13,385 ERROR [org.alfresco.web.ui.common.Utils] Failed to create Rule due to error: null
java.lang.NullPointerException
    at org.alfresco.repo.rule.RuleServiceImpl.getLinkedToRuleNode(RuleServiceImpl.java:1516)
    at org.alfresco.repo.rule.RuleServiceImpl.isLinkedToRuleNode(RuleServiceImpl.java:1504)
    at org.alfresco.repo.rule.RuleServiceImpl.checkForLinkedRules(RuleServiceImpl.java:947)
    at org.alfresco.repo.rule.RuleServiceImpl.saveRule(RuleServiceImpl.java:740)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:34)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy53.saveRule(Unknown Source)
    at org.alfresco.web.bean.rules.CreateRuleWizard.finishImpl(CreateRuleWizard.java:148)
    at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:123)
    at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:119)
    at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:388)
    at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.java:129)
    at org.alfresco.web.bean.wizard.WizardManager.finish(WizardManager.java:593)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
    at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
    at javax.faces.component.UICommand.broadcast(UICommand.java:151)
    at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:115)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:191)
    at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:105)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:80)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:143)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.repo.web.filter.beans.SessionSynchronizedFilter.doFilter(SessionSynchronizedFilter.java:67)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:104)
    at sun.reflect.GeneratedMethodAccessor443.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:116)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy238.doFilter(Unknown Source)
    at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.java:68)
    at sun.reflect.GeneratedMethodAccessor443.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:116)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy238.doFilter(Unknown Source)
    at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)

その追加のフォルダーが作成される理由、新しく作成されたコンテンツで実行された後にルールが削除される理由、および元のルールを最初に削除した後に新しいルールをフォルダーに追加できない理由を誰かが知っていますか?

4

5 に答える 5

3

私はAlfrescoフォーラムの同じポスターからこの正確な質問への答えを投稿しました。答えは、コードがドキュメントと同じ名前を使用してフォルダーを作成しようとすることです。ノードはフォルダ内で一意の名前を付ける必要があるため、これは許可されていません。

于 2012-08-22T23:51:36.050 に答える
3

ルールが複数回実行されており、それ自体がトリップしているようです。スクリプト自体が実行しているアクションの一部によって、スクリプトが再度実行される可能性がありますか?

ルールがサブフォルダーに適用されていないことを確認し、ウィザードの条件部分で[すべてのアイテム]を選択するのではなく、より具体的なもの(すべてのコンテンツアイテムなど)を試してください。

于 2012-08-29T11:47:29.097 に答える
2

実際の問題は、「すべてのアイテム」が更新されているという条件ルールによって、ルールが複数回トリガーされることだと思います。したがって、すべてのノードは、ルールのあるスペース内のリポジトリ内で更新を受信し(おそらくサブフォルダーでもありますが、それを確認します)、トリガーして、おそらくループを作成します。「ノードが作成されているとき」というトリガーでルールを使用しようとしましたか?

アップデート:

そこで、Alfresco3.4.7Entepriseと4.0Communityx64の両方(LinuxとWindows)でこれをデバッグしようとしました。

  • Alfresco内のScriptsディレクトリ/CompanyHome /DataDictionary内にjsファイルを作成しました。
  • 次に、CompanyHomeスペース内にmainFolderフォルダーを作成しました。
  • mainFolderフォルダー内に新しいPDFファイルをアップロードしました。
  • 次に、PDFファイルに対してfsファイルを実行しました。したがって、ドキュメントの詳細ビューに入り、[アクションの実行]-[スクリプトの実行]をクリックします。
  • そこでは、すべてが完璧に機能します!

つまり、問題はルールの実行にあり、「すべてのアイテム」でトリガーされるため、スクリプトがタイトル名で新しいフォルダーを作成すると、再帰的にトリガーされます。「PDFタイプのみ」のノードでルールを実行してみましたが、お守りのようです!

お役に立てれば...

于 2012-08-31T11:03:41.057 に答える
1

この線:

 var rootSpaceName = companyhome.childByNamePath("mainFolder");

companyhomeつまり、リポジトリのルートに関連するフォルダを見つけようとします。そのフォルダはリポジトリに存在しますか?

スペースに入るファイルを操作するスクリプトを作成しようとしている場合は、そのファイルまたはスペースに相対的なパスを使用する必要はありませんか(documentまたはspaceオブジェクトではなく、オブジェクトを使用companyhome)?

そうでない場合は、おそらくあなたはあなたが達成しようとしていることをもう少し説明することができますか?

まだ使用していない場合は、Alfresco JavaScript ConsoleはJavaScriptコードを試すための非常に便利なアドオンであり、を使用してコンソール出力を確認できますlogger.log()

于 2012-08-22T23:17:53.550 に答える
1

mainFolderに存在するファイルにタイトルフィールドと作成者フィールドがあることが要件である可能性があります。ファイルをtitle->authorフォルダーに移動します。

そのように mainFolder->FileName:file1、Title:title1、Author:author1

mainFolder-> title1->author1->file1

私は自分で編集したコードを試してみて、alfresco側のalfrescoコミュニティ4.0cと、Windowsの共有側のjavaスクリプトコンソールで実行します。

mainFolderへのルールを作成する場合

1)条件を選択します

1.1選択条件としてのタイプまたはサブタイプのコンテンツ

1.2条件値を設定するコンテンツ。下のチェックボックスをオンにしないでください。 概要はアイテムは「コンテンツ」のサブタイプです

2)[アクション]を選択して、同じようにスクリプトを実行します

3)タイプ アイテムが作成または挿入されます

コードを実行すると動的にフォルダが作成されるため、これらを選択します。したがって、ルールはコンテンツにのみ適用されます。その他は、バックグラウンドでルールの実行のチェックを外す以外は同じです。作成されたアイテムにタイトル名がない場合、屋外ではデフォルトでアイテム名がタイトルとして想定されます。

最終更新コード:

function main()
{
    //mainFolder space/folder MUST exist under companyhome.
    var rootSpaceName = companyhome.childByNamePath("mainFolder");

    if(rootSpaceName == null)
    { 
        logger.log("Company Home/mainFolder does not exist, so we have nothing to do.");
        return;
    }
    else
    {
        logger.log("Company Home/mainFolder exists, so carry on our process.");

        var childList = rootSpaceName.children;
        var count = childList.length;

        if(count == 0)
        {
            logger.log("Company Home/mainFolder does not have child, nothing to do.");
            return;
        }
        else
        {
            for(var i = 0; i < count; i++)
            {   
                var child = childList[i];
                logger.log("This child is: " + child);

                // If each of child is file
                if(child.isDocument)
                {
                    // Get title of file and
                    // If childTitle is null, we set DEFAULT value
                    var childTitle = childList[i].properties.title;
                    if(childTitle == null)
                    {
                        childTitle = "New Title";
                    }
                    else if(childTitle == child.properties.name)
                    {
                        childTitle = "Title " + childTitle;
                    }

                    // Get author of file.
                    // If childAuthor is null, we set DEFAULT value
                    var childAuthor = childList[i].properties.author;
                    if(childAuthor == null)
                    {
                        childAuthor = "New Author";
                    }
                    logger.log("Original Title :" + child.properties.title + "\tAuthor :" + child.properties.author);
                    logger.log("Setting Title :" + childTitle + "\tAuthor :" + childAuthor);

                    // If title folder does not exist, create title folder
                    var newSpaceTitle = companyhome.childByNamePath("mainFolder/" + childTitle);

                    if(newSpaceTitle == null)
                    {
                        newSpaceTitle = rootSpaceName.createFolder(childTitle);
                        logger.log("mainFolder/" + childTitle + " is created.");
                    }

                    // If author folder does not exist, create author folder
                    var newSpaceAuthor = companyhome.childByNamePath("mainFolder/" + childTitle + "/" + childAuthor);
                    if(newSpaceAuthor == null)
                    {
                        newSpaceAuthor = newSpaceTitle.createFolder(childAuthor);
                        logger.log("mainFolder/" + childTitle + "/" + childAuthor + " is created.");
                    }

                    child.move(newSpaceAuthor);
                    logger.log("Moving file " + child.properties.name);
                }
            }
        }
    }
    return;
}

main();
于 2012-08-23T13:16:58.363 に答える