<div dir="ltr">Hello Brian,<div><br></div><div>your guidance has helped me set up the settings and they seem to be working now and uploaded to <a href="https://github.com/l3mus/ArchivesSpace-authority-project/tree/master/unlv_marc_exporter">https://github.com/l3mus/ArchivesSpace-authority-project/tree/master/unlv_marc_exporter</a> though I need to tweak a couple more things.</div><div><br></div><div>I'm just having one trouble that the preferences are not saving now and it's,for some reason, trying to reference my settings schema and I end up getting the following below. I can't seem to figure out why it's referencing that <span style="color:rgb(0,0,0);line-height:18px;white-space:pre-wrap;background-color:rgb(255,0,0)">marc_export_user_id </span><span style="color:rgb(0,0,0);line-height:18px;white-space:pre-wrap;background-color:rgb(255,255,255)"> when it's not part of the preferencecontroller. I even changed it to marc_export_user_id from user_id to try and avoid this problem.</span></div><div><span style="color:rgb(0,0,0);line-height:18px;white-space:pre-wrap;background-color:rgb(255,255,255)">Do you have any ideas? </span></div><h1 style="color:rgb(51,51,51);font-family:helvetica,verdana,arial,sans-serif;line-height:18px"><font size="2">Exception in PreferencesController#update</font></h1><pre style="padding:10px;white-space:pre-wrap;line-height:18px"><span style="color:rgb(51,51,51);background-color:rgb(238,238,238)">Unknown response: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>Internal Server Error at &#x2F;repositories&#x2F;2&#x2F;preferences&#x2F;4</title>
  <meta name="robots" content="NONE,NOARCHIVE" />
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60%; color:#666; font-weight:normal; }
    table { border:none; border-collapse: collapse; width:100%; }
    td, th { vertical-align:top; padding:2px 3px; }
    th { width:12em; text-align:right; color:#666; padding-right:.5em; }
    #info { background:#f6f6f6; }
    #info ol { margin: 0.5em 4em; }
    #info ol li { font-family: monospace; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
  <div id="summary">
    <h1>Internal Server Error <span>(500)</span></h1>
    <table class="meta">
      <tr>
        <th>Request Method:</th>
        <td>POST</td>
      </tr>
      <tr>
        <th>Request URL:</th>
      <td>http:&#x2F;&#x2F;localhost:8089&#x2F;repositories&#x2F;2&#x2F;preferences&#x2F;4</td>
      </tr>
    </table>
  </div>
  <div id="info">
</span><font color="#000000" style="background-color:rgb(255,0,0)">    <p>(NoMethodError) undefined method `marc_export_user_id&#x27; for nil:NilClass</p></font><font color="#333333" style="background-color:rgb(238,238,238)">
  </div>

  <div id="explanation">
    <p>
    You're seeing this error because you use <code>JRuby::Rack::ErrorApp::ShowStatus</code>.
    </p>
  </div>
</body>
</html>
 (code: 500)</font></pre><pre style="padding:10px;white-space:pre-wrap;line-height:18px"><font color="#333333">Thank you,</font></pre><pre style="padding:10px;white-space:pre-wrap;line-height:18px"><font color="#333333">Carlos Lemus</font></pre><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 19, 2015 at 6:52 AM, Brian Hoffman <span dir="ltr"><<a href="mailto:brianjhoffman@gmail.com" target="_blank">brianjhoffman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Carlos,<div><br></div><div>I think I see the problem - you’re copying from one of the more idiosyncratic parts of the API, so it’s a bit hard to see what’s going on. The preferences model in the backend builds a composite preferences object by fetching all applicable rows from the table based on four contexts:  global, repo, user_global, user_repo. These basically scope the data: preferences for any user using any repo, any user using a particular repo, a particular user using any repo, and a particular user using a particular repo. The context of the request determines which contexts get loaded and what kind of composite object gets assembled. But there is always at least a ‘global’ preference representing the abstract ‘global’ repository. In the preferences model, there’s an `init` method that takes care of creating that record at startup:</div><div><br></div><div><a href="https://github.com/archivesspace/archivesspace/blob/05f01f83414c6daa259e72abcc38b50d9450e769/backend/app/model/preference.rb#L7-L34" target="_blank">https://github.com/archivesspace/archivesspace/blob/05f01f83414c6daa259e72abcc38b50d9450e769/backend/app/model/preference.rb#L7-L34</a></div><div><br></div><div>So the frontend controller safely  assumes that there is always one context preference for `global` and expects it to be on the json payload. In your plugin, you don’t have the `init` logic so that’s not a safe assumption. You could either add something similar, or just tweak the frontend controller if the concept of ‘global’ plugin_settings doesn’t make sense in your case.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Brian</div></font></span><div><div class="h5"><div><br></div><div><br></div><div><br></div><div><br><div><blockquote type="cite"><div>On Oct 15, 2015, at 5:49 PM, Carlos Lemus <<a href="mailto:carlos.lemus@unlv.edu" target="_blank">carlos.lemus@unlv.edu</a>> wrote:</div><br><div><div dir="ltr">Hello Brian,<div><br></div><div>Thank you for your recommendations, they've helped out a lot. I believe I am very close to what I want to do and  what I want to achieve, but I've reached a little snag and I can't find the problem.</div><div><br></div><div>I took a little different path that I thought matched a bit closer to what I wanted to accomplish through your suggestions and tried to mimic the preferences/defaults. (a new version of my code at <a href="https://github.com/l3mus/ArchivesSpace-authority-project/tree/master/plugin_settings" target="_blank">https://github.com/l3mus/ArchivesSpace-authority-project/tree/master/plugin_settings</a>)</div><div><br></div><div>At <a href="https://github.com/l3mus/ArchivesSpace-authority-project/blob/master/plugin_settings/frontend/controllers/plugin_settings_controller.rb#L82" target="_blank">https://github.com/l3mus/ArchivesSpace-authority-project/blob/master/plugin_settings/frontend/controllers/plugin_settings_controller.rb#L82</a>  I am getting a nil class error because it's not in the json and I can't find the area where it gets added or if there is a step that I'm missing for it to add that setting. I think it would be beneficial if the settings could be edited in a per repository/per user basis like the preferences seem to work. </div><div><br></div><div>{"settings"=>{"ead_loc_text"=>"Findind Aid Location: "}, "global"=>#<JSONModel(:plugin_settings) {"id"=>1, "lock_version"=>22, "json_schema_version"=>1, "repo_id"=>1, "user_uniq"=>"GLOBAL_USER", "settings"=>#<JSONModel(:settings) {"ead_loc_text"=>"Findind Aid Location: ", "jsonmodel_type"=>"settings"}>, "create_time"=>"2015-10-14T21:45:28Z", "system_mtime"=>"2015-10-15T20:13:34Z", "user_mtime"=>"2015-10-15T20:13:34Z", "jsonmodel_type"=>"plugin_settings", "uri"=>"/repositories/1/plugin_settings/1"}>, "settings_global"=>{"ead_loc_text"=>"Findind Aid Location: "}}<br></div><div><br></div><div>it's missing that ['global']['repository']['ref'] value, I'm not sure where it's coming from.</div><div><br></div><div>The json above is coming from the following. It's either in here or somewhere before that that global setting is set.</div><div><a href="https://github.com/l3mus/ArchivesSpace-authority-project/blob/master/plugin_settings/backend/model/plugin_settings.rb#L95" target="_blank">https://github.com/l3mus/ArchivesSpace-authority-project/blob/master/plugin_settings/backend/model/plugin_settings.rb#L95</a><br></div><div><br></div><div>I appreciate the help,</div><div><br></div><div>Thank you,</div><div>Carlos Lemus</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 13, 2015 at 7:11 AM, Carlos Lemus <span dir="ltr"><<a href="mailto:carlos.lemus@unlv.edu" target="_blank">carlos.lemus@unlv.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Hello Brian,</p><p dir="ltr">Thank you for the response.  I will definitely need more values so I'll try taking a look at the defaults controller.<br>
I'll let you know if I get something working.</p><p dir="ltr">Thank you,<br>
Carlos Lemus</p><div><div>
<div class="gmail_quote">On Oct 13, 2015 6:31 AM, "Brian Hoffman" <<a href="mailto:brianjhoffman@gmail.com" target="_blank">brianjhoffman@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Carlos,<div><br></div><div>I think you might want to look at the defaults controller and model, as well as the sequence controller and model. If you really just need a single string value, you may want to dispense with the JSONModel stuff completely and just have your backend endpoint take a single parameter and update the model.</div><div><br></div><div>You can look at the DefaultValues model for an example of how to just have 1 row in the table.</div><div><br></div><div>For the frontend, you’re probably better off not using the handle_crud helper if you don’t use JSONModel, and just have the controller prepare and send an update request to the backend. The default_values example might help here too:</div><div><a href="https://github.com/archivesspace/archivesspace/blob/master/frontend/app/models/default_values.rb" target="_blank">https://github.com/archivesspace/archivesspace/blob/master/frontend/app/models/default_values.rb</a></div><div><br></div><div>Brian</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br><div><blockquote type="cite"><div>On Oct 12, 2015, at 5:54 PM, Carlos Lemus <<a href="mailto:carlos.lemus@unlv.edu" target="_blank">carlos.lemus@unlv.edu</a>> wrote:</div><br><div><div dir="ltr"><span style="font-family:Arial,Helvetica,sans-serif">Hello,</span><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">What I want to accomplish is to create a form, possibly in the system_menu_controller, that will allow me to create certain fields/settings with user-input values, save those values, and then let me access them at different points in my plugin. </div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">What I've tried so far:</div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">I've tried to mimic a bit of the accessions_summary_reports and the hello_world plugin. However, these seem both to be able to continuously create new objects in the schema database pertaining to it, but I just want to have one empty field for the settings that can just be updated instead of having to create multiple settings. I have tried something similar with the defaults, but I don't think I implemented them correctly.</div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">Here is a github link to my trial</div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><a href="https://github.com/l3mus/ArchivesSpace-authority-project/tree/master/plugin_settings" rel="nofollow" style="margin:0px;padding:0px;border:0px;text-decoration:none;color:rgb(102,17,204)" target="_blank">https://github.com/l3mus/ArchivesSpace-authority-project/tree/master/plugin_settings</a><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">I hope that was clear enough, please let me know if I need to clarify more.</div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">I'm just looking for some direction on what I could be doing. How could I approach doing this? I'm I looking in the right direction? Or is there a better example that can help me form this? </div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">Thank you,</div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif"><br></div><div style="margin:0px;padding:0px;border:0px;font-family:Arial,Helvetica,sans-serif">Carlos Lemus</div></div>
_______________________________________________<br>Archivesspace_Users_Group mailing list<br><a href="mailto:Archivesspace_Users_Group@lyralists.lyrasis.org" target="_blank">Archivesspace_Users_Group@lyralists.lyrasis.org</a><br><a href="http://lyralists.lyrasis.org/mailman/listinfo/archivesspace_users_group" target="_blank">http://lyralists.lyrasis.org/mailman/listinfo/archivesspace_users_group</a><br></div></blockquote></div><br></div></div></blockquote></div>
</div></div></blockquote></div><br></div>
</div></blockquote></div><br></div></div></div></div></blockquote></div><br></div></div>