Request a topic or
contact an Arke consultant
404-812-3123
All posts by nicole rodriguez

Arke Systems Blog

Useful technical and business information straight from Arke.

About the author

Author Name is someone.
E-mail me Send mail

Recent comments

Archive

Authors

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2017

Missing Disk Cleanup on Windows Server 2008 R2

Recently ran into a fun puzzler where my Windows Server 2008 R2 Machine had Disk Defragmenter available, but not Disk Cleanup.  After a few googles, I found this little fun gem.  In short, Disk Cleanup is part of what Windows calls 'Desktop Experience' which installs a lot of other items like Desktop Themes and the like.  Since most servers are meant for a specific function, Windows by default disables this.  This blog post article tells you how to either:

  • Turn Desktop Experience on
  • Copy over the two executables needed get back your Disk Cleanup

Kudos to Nathalie Vaiser.

https://support.appliedi.net/index.php?/Knowledgebase/Article/View/992/0/how-to-enable-the-disk-cleanup-tool-on-windows-server-2008-r2


Posted by Nicole Rodriguez on Wednesday, September 4, 2013 3:49 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Sitecore Workbox: No changes have been made

I had inherited a Sitecore instance from a previous vendor and one of the main questions the client had for me was about items in their workbox.  This specific Sitecore instance had over 29 different languages, over 35 different microsites and content editors from around the world.  When I opened the workbox, I found a whole list of items, all of them claiming 'No Changes have been made'.  When I tried to submit any of them, I would get a generic Sitecore error and the log files weren't helping me narrow it down.  I had assumed with all the moving parts, something catastrophic had happened.  Turns out the issue was rather simple.

[Sreenshot of over 200 items in this limbo state]

 

I opened the item and viewed the Standard fields.  Turns out the state was filled but not the workflow to which it belonged.

 

 

Once I had correctly assigned the items, the workflow worked as intended and I could clear the items for the client.  Be sure to check your workflows.  


Posted by Nicole Rodriguez on Wednesday, March 6, 2013 6:47 PM
Permalink | Comments (0) | Post RSSRSS comment feed

IE7 not displaying tr/td background color

This was a little fustrating to find, but for those of you who are applying a background-color attribute to your table tr's and td's and are not seeing the color appear in IE7 or lower, check your reset.css.  If you reset.css has 'tr:background:transparent' applied to it, your color will not show even with the '!important' tag.  Check the very top of your reset.css.  Usually the tr is lumped together with all default html tags so its easy to miss.


Categories: CSS
Posted by Nicole Rodriguez on Tuesday, September 18, 2012 9:22 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Passing query to Custom Google Search on your webpage

Stackoverflow got me the answer to this.

If you're using Custom Google Search on your website and you have a small textbox on each page that is supposed to 'pass' that query to your search page (ultimately passed into your Google search post action), you should do the following: 

Instead of the code Google provided you with to embed, take your unique key provided by Google and place it in the '***my key***') setting of the first code snippet below.  What this is doing is creating a new instance of your custom google search with your unique key and drawing out the results (*cse*) and forcing it to submit the action (execute) with your parameters ($q). 

 

    google.load('search', '1', { language: 'en' });

    function OnLoad() {
        var customSearchControl = new google.search.CustomSearchControl('009045124056933145342:5wmgo53sugc');
        customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
        customSearchControl.draw('cse');
        customSearchControl.execute(search_value);
    }
    google.setOnLoadCallback(OnLoad);

 

On my click event for my search text box on every page, I sanitized the query (this is a very basic sanitize, you should alter as necessary to protect your site!) and appended those parameters to the query string being sent to my search results page.

private String SanitizeUserInput(String text)
        {
            if (String.IsNullOrEmpty(text))
                return String.Empty;

            String rxPattern = "<(?>\"[^\"]*\"|'[^']*'|[^'\">])*>";
            Regex rx = new Regex(rxPattern);
            String output = rx.Replace(text, String.Empty);

            return output;
        }

        protected void Button1_Click(object sender, ClickEventArgs e)
        {

            Response.Redirect(
                String.Format(
                Page.ResolveUrl("~/{MySearchPage}.aspx?q={0}"),
                    HttpUtility.UrlEncode(SanitizeUserInput({mysearchtextbox}.Text.Trim()))
                    ),
                false
                );
        }



On my search results page, I remove those parameters with the below function and pass them into my $q variable.

function getQuerystring(key, default_) {
if (default_ == null) default_ = "";
key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
var qs = regex.exec(window.location.href);
if (qs == null)
return default_;
else
return qs[1];
}


Posted by Nicole Rodriguez on Wednesday, August 24, 2011 9:36 PM
Permalink | Comments (0) | Post RSSRSS comment feed

CRM 4.0 Deletion Service

Today I had an issue where I had deleted a number of records from CRM during my loads of testing through Scribe.  After deleting these records, CRM updated those records to have a deletestatecode = 2.  Therefore, every subsequent scribe job would no longer work properly as the address still existed in the database.  Those of you used to CRM 3.0, there used to be a MSCRMDeletionService you could restart in your running services and it would force the job to run through all your records.  That is now wrapped in the Async Service of CRM 4.0 which you can restart.  For those of you who don't/can't restart that service for any reason, try this here:

USE MSCRM_CONFIG

UPDATE dbo.ScaleGroupOrganizationMaintenanceJobs SET
NextRunTime = getdate() -- Now
WHERE OperationType = 14
-- Deletion Service

This was found on an old archive site, posted by Aaron Elder.  Hope this helps others find it.  Be patient.  I fumed for a few minutes thinking it wasn't working but just give it some time. ;)

 

When all else fails.....

There are other ways going directly to the database level, but I cannot stress how bad of an idea that is and how much it should never be done.  Exhaust all other options CRM provides you before going to the database level and modifying it by hand.  'Because it would be faster' should never be a good enough excuse!!  If you have no other options of using CRM to it's full abilities and must do it by hand, something went horribly wrong and needs to be re-evaluated immediately after you clean up your data.

 

 

you're still reading....*sigh* ok but I warned you.

 CRM gurus correct me if I'm wrong, but from the understanding I have at this moment, every entity in CRM has two tables:

  • [YourEntity]base - table that holds all the default out of the box attributes of your entity
  • [YourEntity]extensionbase - table that holds all your 'new_' custom attributes for your entity

So if you have a 'Contact' with a 'new_foo' attribute and someone adds a new 'Contact' to your CRM instance, 

  •  1 row added to your 'Contactbase' table - holds address1_line1, name, firstname, etc (all defaults)
  •  1 row added to your 'Contactextensionbase' table - holds new_foo (all custom)

The BOTH have the same ContactID because they ARE the same contact.  So if you have to delete at the database level you MUST delete from the extensionbase table first and foremost.  The smartest thing to do is to first find out exactly which contacts you need to delete.  Whether its on IDs or a certain field state, get a select statement as correct and accurate as possible.  Once you have that select, I like to make a temp table of those records but this is purely optional.  The reason I like to do this is because sometimes the field I care to do my search on is a 'new_' attribute.  Where 'new_foo' = null.  But if I run my delete query on extensionbase where 'new_foo' = null, I just shot off my own foot.  The reason?  I just deleted all the rows who had any knowledge that 'new_foo' existed.  How do I know what rows I just deleted to now clear out the base table?   With a temp table, I can capture all that data and include a 'contactid' so I never am without a reference of what fields need to be deleted.

 As always, BACKUP before attempting this.  Run your delete on extensionbase.  Write down the number deleted.  Run your delete on base.  Match number deleted.  If it doesn't match, Panic.  Restore you database and refine your search until those numbers match.  Re-evaluate your process and NEVER DO IT AGAIN!

 


Categories: CRM
Posted by Nicole Rodriguez on Thursday, June 16, 2011 2:19 PM
Permalink | Comments (0) | Post RSSRSS comment feed

CRM 4.0 Bulk Delete Tool

I found this tool out on the web.  It’s a bulk delete tool for CRM 4.0 since it doesn’t have a bulk delete option.  (As far as I’ve been told, CRM 4.0 Online does, but CRM 4.0 does not).  Anyways, you run the executable and it gives you a very simple UI.  All you need to do is create a view for the entity with all the records you want to bulk delete.

 

1.       Run the executable

 

 

2.       The bottom corner shows you’re not connected.  Click the drop down and ‘Create a new Connection…’

3.       You will get the connection information screen

 

 

4.       Give it all your information and click ‘OK’.

5.       You’ll now see you’re connected at the bottom of your screen.  And in the future, you will have that connection information available to you in that small dropdown as shown below:

 

 

6.       NOTE: for this to work as you want it to, you need to create a view on that entity for the records you want to delete.  If this is going to be routine, perhaps a CRM job plugin might be better, but we’ve had several instances where we loaded a CRM instance with a test data and want to dump it all, so here’s a fun tool for it.  Create your view. (I’m assuming here you know how to do that).

7.       After your view is created, enter your entity in the textbox and click ‘Retrieve Views’.  You’ll now get a list of those views. 

 

 

8.       You can schedule it to run in the future or recur but, again, I think a plugin would be more beneficial for that.  You can also have it send you an email after the job is done deleting.  It’s not perfect but it’s out there. 

 

Enjoy.


Tags: ,
Categories: CRM
Posted by Nicole Rodriguez on Tuesday, April 26, 2011 4:54 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Windows 7 blocks files from external source

A while back I wrote to ArkeGlobal about windows 7 blocking my files.  It really should go here, so here it is with some updates.

 Original Sept 10, 2009

I downloaded an external dll source for a web application and adding the reference to my project yielded this error:

System.Security.SecurityException: Request for the permission of type 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.”

As it turns out Windows 7 security was blocking my downloaded dlls from running as a trusted source.  Going into the file system itself, I checked the permissions on the actually dll file and a message at the bottom says:

“This file came from another computer and might be blocked to help protect this computer.”

There is an ‘Unblock’ button right next to it and once I clicked it, it solved my issue.

 

Updated Oct 27, 2009

Since then, I ran into a similar issue but because of the way I had to build the project, every time it ran, it re-added that security back onto those dlls, so I found this: http://www.petri.co.il/unblock-files-windows-vista.htm

Look at solution 3 and/or 4.

 Updated Mar 2011

This last encounter is for those of you that have large, and I do mean large files to copy down.  I had a particular instance where I had to download an upgrade zip file for DNN to lay over a pre-existing one.  When I downloaded and extracted all the contents of it to the client's machine, I had some blocked files.  I grumbled and unblocked it, tried again and got the same error.  Then I realized, Windows had blocked *every* file inside that zip.  I immediately started googling and every single article basically said, 'window's does not provide a way to unblock in bulk'.  So I stared at over 1700 files I had to right-click and unblock by hand with no one providing a solution.  I was about 1 hour in when I had an idea: 

"Right-click -> Properties" on the ZIP folder

It will have the same 'unblock' feature that all it's children are inheriting from.  Once I unblocked the zip, I extracted and all my files played nice again.

 


Posted by Nicole Rodriguez on Thursday, March 17, 2011 2:50 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Debugging with Visual Studios (SQLite error)

I’ve run into a reoccurring error that only pushes to the surface while debugging.  The following error:

Could not load file or assembly 'System.Data.SQLite, Version=1.0.48.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Is a result of IIS and the windows box trying to run 32 vs 64 bit versions of the application and of the sqlLite.dll.  There are two dlls involving sqlLite.  One is System.Data.SQLite, the other System.SQLite.  If you don’t require SQLite in your project, remove it or rename it from a .dll extension.  See post for Web Forms for Marketers on how SQLite might affect you.  If you must use SQLite, it is recommended that you download the correct version of the dll from here: http://www.sqlite.org/download.html 

**There have been issues with people running the application after downloading the correct 64 version of the dll and running sitecore as a 64 bit application.  Be sure you have .NET SP 1 installed on your VM or other.


Tags: , , , ,
Categories: Sitecore
Posted by Nicole Rodriguez on Monday, April 12, 2010 12:37 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Web Form for Marketers

For those just downloading the installer, check inside your downloaded file first (and ALWAYS for future packages) and be sure that there is only one zip inside called 'package.zip'.  Do not unzip that file.  Sometimes they wrap the package in another zip for downloading off their website.  If you do not catch a double zipped package, you bring doom and reinstall for your application.  Follow the instructions on installing packages as suggested on www.sdn.sitecore.net .  After installing, it is not a finished out of the box product.  Follow the instructions below.

To submit forms (Associated Error: ‘We experience a technical difficulty while processing your request. Your data may not have been correctly saved.’) 

-          Open SQL Server and attach database located in Website/Data/Sitecore_WebForms.mdf

-          Open forms.config file in Website/App_Config/Include/forms.config

-          Uncomment the mssql connection string and add the proper fields

-          Open connecitonstrings.config in Website/App_Config/Connectionstrings.config

-          (The magic.) Add this to your config: <add name="remoteWfmService" connectionString="url=http://localhost/sitecore%20modules/shell/Web%20Forms%20for%20Marketers/Staging/WfmService.asmx;user=admin;password=b;timeout=60000"/>

-          Test.


Categories: Sitecore
Posted by Nicole Rodriguez on Monday, April 12, 2010 12:31 PM
Permalink | Comments (0) | Post RSSRSS comment feed