Select to view content in your preferred language

Alphanumeric Editing of non-SDE data.

830
2
12-02-2011 12:53 AM
TiagoRibeiro
Deactivated User
Hi,

I'm developing an WebGIS application that has to be able to edit some alphanumerical data that is related to the geographical data. The problem is that this data is in another database. Is it possible to edit it using the JavaScript API with ArcGIS Server Services?
Thanks
0 Kudos
2 Replies
derekswingley1
Deactivated User
I don't think this is possible but you might want to ask in the general REST API forum. It's probably also worth providing a little more detail on how the data in the non-geodatabase database is linked to your spatial data.
0 Kudos
TiagoRibeiro
Deactivated User
Hello,

I think I kinda managed to edit data of a table of a non-SDE database.
I have several SQL Server databases, and only one SDE database also on SQL Server. I created views in the SDE database that go get data to the other databases, then I registered the views in the geodatabase, and now I can edit this tables using ArcMap through the views, and all works brilliantly. The problem is when I try to edit in the WebApplication...
I published a service that as the tables. I managed to pass the data to the AttributeInspector, and seems well until... I edit the data.
I changed the onAttributeChange event to handle the edits. When I go to edit the information, the event triggers, and the error function is called but the edits go through anyway, although for some odd reason the table gets locked and I have to manually stop the service, only then the lock in the table is release. Here's the code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title></title>
 <link rel="stylesheet" type="text/css" href="https://community.esri.com/arcgis_js_api/library/2.6/jsapi/js/dojo/dijit/themes/tundra/tundra.css">
 <script src="/arcgis_js_api/library/2.6/jsapi/" type="text/javascript"></script>
    <script type="text/javascript">
      djConfig = {
        parseOnLoad: true
      };
    </script>
  <style type="text/css">
  #attrInspector {width: 250px;}
  .esriAttributeInspector {padding: 10px; width: 100px;}
  .esriAttributeInspector .atiLayerName {display:none;}
    </style>

 <script type="text/javascript">
  dojo.require("dijit.layout.BorderContainer");
  dojo.require("dijit.layout.ContentPane");
  dojo.require("esri.map");
  dojo.require("esri.layers.FeatureLayer");
  dojo.require("esri.dijit.AttributeInspector-all");
  
  var map, featureLayerAlfaMMServer, featureLayerAlfaLinkedServer, featureLayerGeo;


  function init() {
   //map options and actions
   var initialExtent = new esri.geometry.Extent({"xmin":-1051697,"ymin":4386071,"xmax":-776524,"ymax":4569520,"spatialReference":{"wkid":102100}});
   map = new esri.Map("map",{extent:initialExtent});
   dojo.connect(dijit.byId('map'), 'resize', map,map.resize);   
   dojo.connect(map, "onLayersAddResult", init2);
   
   //simple layer for visualization
   var sessaoProcesso = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost/ArcGIS_Server/rest/services/ARH_PROCESSOS_ALFA/MapServer",{id:"sessaoProcesso"});
   map.addLayer(sessaoProcesso);
   
   //featurelayer with alphanumeric data from a view within the same server
   featureLayerAlfaMMServer = new esri.layers.FeatureLayer("http://localhost/ArcGIS_Server/rest/services/ARH_PROCESSOS_ALFA/FeatureServer/1",{
            mode: esri.layers.FeatureLayer.MODE_SELECTION
    ,outFields: ["*"]
         });
   //featurelayer with the spatial data
   featureLayerGeo = new esri.layers.FeatureLayer("http://localhost/ArcGIS_Server/rest/services/ARH_PROCESSOS/FeatureServer/0",{
            mode: esri.layers.FeatureLayer.MODE_SELECTION
    ,outFields: ["*"]
         });  
   var selectionSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,0,0.25]));
   featureLayerGeo.setSelectionSymbol(selectionSymbol);
   //after the layers are added, go to init2
   map.addLayers([featureLayerGeo]);
  }
  
  function init2(){
   //get all the features for the alphanumeric layer
   var selectQuery = new esri.tasks.Query();
   selectQuery.where = "1=1";
   featureLayerAlfaMMServer.selectFeatures(selectQuery, esri.layers.FeatureLayer.SELECTION_NEW, function(features,selectionMethod){
    spatialSearch(features[0].attributes.Lic_licenca);
   });
   var layerInfosMMServer = [{'featureLayer':featureLayerAlfaMMServer,
    'showAttachments':false,
    'isEditable': true,
    'showDeleteButton':false
   }];
   var attInspectorMMServer = new esri.dijit.AttributeInspector({layerInfos:layerInfosMMServer}, "attrInspectorMMServer");
   dojo.connect(attInspectorMMServer,"onNext", function(feature) {
    spatialSearch(feature.attributes.Lic_licenca);
   });
   //save changes
   dojo.connect(attInspectorMMServer, "onAttributeChange", function(feature,fieldName,newFieldValue) {
    console.log("Edit",feature,fieldName,newFieldValue);
    feature.attributes[fieldName] = newFieldValue;
    feature.getLayer().applyEdits(null, [feature], null, function(add,update,del){
     console.log("Success",add,update,del);
    }, function(error){
     console.log("Error",error);
    });
   });
  }
  
  //function to "highlight" the feature related to the current record
  function spatialSearch(licenca){
   featureLayerGeo.clearSelection();
   var query = new esri.tasks.Query();
   query.where = "Lic_licenca = " + licenca;
   featureLayerGeo.selectFeatures(query, esri.layers.FeatureLayer.SELECTION_NEW, function(){
    if(featureLayerGeo.getSelectedFeatures().length > 0){
     //Edit spatial
    }else{
     //Create spatial
    }
   });
  }

  dojo.addOnLoad(init);
 </script>
</head>
<body class="tundra">
 <div id="map" style="float: left; width: 70%; height:700px; border-top:1px solid black; border-bottom:1px solid black; border-right:1px solid black;"></div>
 <div id="teste" style="float: right; width: 30%; height:700px; border-top:1px solid black; border-bottom:1px solid black; margin: 0px;">
  <div style="width: 100%;" id="attrInspectorMMServer"></div>
 </div>
</body>
</html>


Any input would be much appreciated.
0 Kudos